# VBA - Loop through cells and multiply based on certain cells

Need VBA to do the below calculations. The range however can be 100s of columns and 100s of row.
So, I need to be able to loop through.

(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.
(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.
(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.
(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.
(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.
(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.
(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.
(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.
(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.

I found the below code; however, I don't know what to do to get it to loop through the ranges and apply the formula based on row and column.

Sub LoopRange()

Dim rCell As Range
Dim rRng As Range

ActiveSheet.Range("C16:C25").Select

For Each rCell In Selection
If Not IsError(rCell) Then rCell = rCell * "don't now what to do here"
Next rCell

End Sub
###### Who is Participating?

Commented:
If that works, this is the automated equivalent.
``````Sub Q_28978063()
Dim rng As Range
Set rng = ActiveSheet.Range("C1:H1")
rng.Copy
Set rng = rng.Offset(1)
Set rng = ActiveSheet.Range(rng, rng.End(xlDown))
rng.PasteSpecial xlPasteValues, xlPasteSpecialOperationMultiply
End Sub
``````
0

Commented:
Not quite sure what you need.  Your 'formulas' all point to the same row pars, even though they are on many rows.
0

Author Commented:
I see the mistake I made.  It shouldn't have been the same pars.

(A\$1*A3)       (B\$1*B3)       (C\$1*C3)       etc.
(A\$1*A4)       (B\$1*B4)       (C\$1*C4)       etc.
(A\$1*A5)       (B\$1*B5)       (C\$1*C5)       etc.
(A\$1*A6)       (B\$1*B6)       (C\$1*C6)       etc.
(A\$1*A7)       (B\$1*B7)       (C\$1*C7)       etc.
(A\$1*A8)       (B\$1*B8)       (C\$1*C8)       etc.
(A\$1*A9)       (B\$1*B9)       (C\$1*C9)       etc.
(A\$1*A10)       (B\$1*B10)       (C\$1*C10)       etc.
(A\$1*A11)       (B\$1*B11)       (C\$1*C11)       etc.
0

Commented:
Do you want the formulas or just the values?
0

Commented:
This would populate the A16:K25 cells.
``````activesheet.range("A16").formula="=A\$1*A3"
activesheet.range("A16:A25").filldown
activesheet.range("A16:K25").fillright
``````

It would be easy enough to convert them from formulas to values.
``````activesheet.range("A16:K25").value = activesheet.range("A16:K25").value
``````
0

Commented:
I don't really see the need for looping
0

Author Commented:
i didn't explain it clearly. So, hopefully this try at an explanation is better.

I've attached a worksheet where you can see original and what I eventually need to happen.

NOTE: The range of course would be much larger than this example.

I created a crude macro, but this would be very cumbersome if I had to do it that way.
Multiple-with-VBA-across-Range.xlsm
0

Commented:
Try this:
1. Select the first/top row of cells
2. Ctrl+C
3. Select all the cells below the top row
4. Paste Special (Values, Multiply)

Let me know if that gives you the values you want.
0

Author Commented:
I tried the automated equivalent and it works partially. But, the difference is that the first row values are absolute values.

So the output is not correct in this solution.
0

Commented:
the first row values are absolute values
What does that mean?

Was your posted workbook a representative example of the data?
0

Author Commented:
Yes it was a representative example of the data.

All values are multiplied by the first row. In the last solution, the past copy moves it down, and thereby the next row would multiply by the second row and so forth.

Range("C2").Value = Evaluate("C2*\$C\$1")
Range("D2").Value = Evaluate("D2*\$D\$1")
Range("E2").Value = Evaluate("E2*\$E\$1")
Range("F2").Value = Evaluate("F2*\$F\$1")
Range("G2").Value = Evaluate("G2*\$G\$1")
Range("H2").Value = Evaluate("H2*\$H\$1")

Range("C3").Value = Evaluate("C3*\$C\$1")
Range("D3").Value = Evaluate("D3*\$D\$1")
Range("E3").Value = Evaluate("E3*\$E\$1")
Range("F3").Value = Evaluate("F3*\$F\$1")
Range("G3").Value = Evaluate("G3*\$G\$1")
Range("H3").Value = Evaluate("H3*\$H\$1")
0

Commented:
when I tested the code, it gave the same values as you posted in your posted workbook.
0

Author Commented:
Yeah...... you're correct. I had inadvertently wasn't using apples to apples when I tested on the original data.