Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
Solved

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

Posted on 2016-10-21
Medium Priority
89 Views
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
0
Question by:MATO0618
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 8
• 5

LVL 46

Expert Comment

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

Author Comment

ID: 41854503
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

LVL 46

Expert Comment

ID: 41854592
Do you want the formulas or just the values?
0

LVL 46

Expert Comment

ID: 41854602
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

LVL 46

Expert Comment

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

Author Comment

ID: 41854739
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

LVL 46

Expert Comment

ID: 41854768
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

LVL 46

Accepted Solution

aikimark earned 2000 total points
ID: 41854770
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

Author Comment

ID: 41854780
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

LVL 46

Expert Comment

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

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

Author Comment

ID: 41854786
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

LVL 46

Expert Comment

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

Author Closing Comment

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

0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Freeze panes is an option within all variants of Excel to enable parts of a sheet to remain stationary when the cursor is in another part of the sheet. This is a very useful feature which is overlooked or under used.
Use Windows Task Scheduler to print a Word document weekly so your printer ink won't dry out.
This Micro Tutorial demonstrates how to create Excel charts: column, area, line, bar, and scatter charts. Formatting tips are provided as well.
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templaâ€¦
###### Suggested Courses
Course of the Month7 days, 22 hours left to enroll