Reputation: 415
I am trying to construct a loop that will pull data from two separate sheets and place them into a single table. I was trying to get it to place the data going across the row to the end, then move down one row and repeat until it reaches the end of the table. The Changes
and WTD
columns I and going to figure after the fact. I am just trying to get the This Year
and Last Year
data dropped in. here is the coding that I have.
Sub MakeTable()
Application.ScreenUpdating = False
Dim gRange As Range
Dim i As Integer
Dim j As Integer
Dim baseSheet As Worksheet
Dim from1Sheet As Worksheet
Dim from2Sheet As Worksheet
Dim baseBaseCell As Range
Dim baseFrom1Cell As Range
Dim baseFrom2Cell As Range
Set baseSheet = Sheets("Chart")
Set from1Sheet = Sheets("Week")
Set from2Sheet = Sheets("WeekMinusYear")
Set baseBaseCell = Sheets("Chart").Range("B3")
Set baseFrom1Cell = Sheets("Week").Range("C2")
Set baseFrom2Cell = Sheets("WeekMinusYear").Range("C2")
For i = 0 To 4
For j = 0 To 12
If i = ((4 Mod 2) <> 0) Then
setRawData1
Else
setRawData2
End If
Next j
Next i
End Sub
Function setRawData1()
Dim baseSheet As Worksheet
Dim from1Sheet As Worksheet
Dim from2Sheet As Worksheet
Dim baseBaseCell As Range
Dim baseFrom1Cell As Range
Dim baseFrom2Cell As Range
Set baseSheet = Sheets("Chart")
Set from1Sheet = Sheets("Week")
Set from2Sheet = Sheets("WeekMinusYear")
Set baseBaseCell = Sheets("Chart").Range("B3")
Set baseFrom1Cell = Sheets("Week").Range("C2")
Set baseFrom2Cell = Sheets("WeekMinusYear").Range("C2")
'Sales
baseBaseCell.Offset(0, 0) = baseFrom1Cell.Value 'This Year
'Cost
baseBaseCell.Offset(0, 3) = baseFrom1Cell.Offset(0, 1) 'This Year
'Margin
baseBaseCell.Offset(0, 6) = baseFrom1Cell.Offset(0, 2) 'This Year
'Basis Points
baseBaseCell.Offset(0, 9) = baseFrom1Cell.Offset(0, 3) 'This Year
End Function
Function setRawData2()
Dim baseSheet As Worksheet
Dim from1Sheet As Worksheet
Dim from2Sheet As Worksheet
Dim baseBaseCell As Range
Dim baseFrom1Cell As Range
Dim baseFrom2Cell As Range
Set baseSheet = Sheets("Chart")
Set from1Sheet = Sheets("Week")
Set from2Sheet = Sheets("WeekMinusYear")
Set baseBaseCell = Sheets("Chart").Range("B3")
Set baseFrom1Cell = Sheets("Week").Range("C2")
Set baseFrom2Cell = Sheets("WeekMinusYear").Range("C2")
'Sales
baseBaseCell.Offset(0, 1) = baseFrom2Cell.Value 'Last Year
'Cost
baseBaseCell.Offset(0, 4) = baseFrom2Cell.Offset(0, 1) 'Last Year
'Margin
baseBaseCell.Offset(0, 7) = baseFrom2Cell.Offset(0, 2) 'Last Year
'Basis Points
baseBaseCell.Offset(0, 10) = baseFrom2Cell.Offset(0, 3) 'Last Year
End Function
Here is an example of the table I have.
Sorry for the poor quality on the image. All the columns are broken up like they should be. I have tried several different methods for accomplishing this. as it is now it will go through and drop the last year information into the correct columns, but for the first row only. Any help I could get would be greatly appreciated!
Upvotes: 0
Views: 10214
Reputation: 14135
Use Option Explicit
... otherwise you can run into weird problems with using so similar variable names. But this isn't your issue.
Each of your methods does not actually change the cell it is writing to based on row.
For example (removing additional code):
Function setRawData1()
Set baseFrom1Cell = Sheets("Week").Range("C2")
baseBaseCell.Offset(0, 0) = baseFrom1Cell.Value 'This Year
'Cost
baseBaseCell.Offset(0, 3) = baseFrom1Cell.Offset(0, 1) 'This Year
'Margin
baseBaseCell.Offset(0, 6) = baseFrom1Cell.Offset(0, 2) 'This Year
'Basis Points
baseBaseCell.Offset(0, 9) = baseFrom1Cell.Offset(0, 3) 'This Year
End Function
This function will ALWAYS be setting the exact same cells (regardless as to what your loop status is) because nothing in there ever causes them to be offset in rows.
So when you call
If i = ((4 Mod 2) <> 0) Then
setRawData1 'write to same row every time...
Else
setRawData2 'write to same row every time...
End If
I would suggest modifying your functions to be something like:
Function setRawData1(int rowOffset)
baseBaseCell.Offset(rowOffset, 0) = baseFrom1Cell.Value 'This Year
'Cost
baseBaseCell.Offset(rowOffset, 3) = baseFrom1Cell.Offset(0, 1) 'This Year
'Margin
baseBaseCell.Offset(rowOffset, 6) = baseFrom1Cell.Offset(0, 2) 'This Year
'Basis Points
baseBaseCell.Offset(rowOffset, 9) = baseFrom1Cell.Offset(0, 3) 'This Year
and then passing the correct offset values to each of them
Upvotes: 1