0

2 つの別々のシートからデータを取得して 1 つのテーブルに配置するループを構築しようとしています。行を横切って最後までデータを配置し、1行下に移動して、テーブルの最後に到達するまで繰り返します。Changesと列WTD私とは、事後図に行くつもりです。データをドロップインしようとしてThis YearLast Yearます。これが私が持っているコーディングです。

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

これが私が持っているテーブルの例です。

画質が悪くて申し訳ありませんが、すべての列が本来あるべきように分割されています

画像の画質が悪くてすみません。すべての列が分割されている必要があります。これを達成するために、いくつかの異なる方法を試しました。今のように、昨年の情報を調べて正しい列にドロップしますが、最初の行のみです。私が得ることができるどんな助けも大歓迎です!

4

1 に答える 1

1

... を使用Option Explicitしないと、非常に類似した変数名を使用すると、奇妙な問題が発生する可能性があります。しかし、これはあなたの問題ではありません。

各メソッドは、行に基づいて書き込み先のセルを実際には変更しません。

例 (追加のコードを削除):

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

この関数は、(ループの状態に関係なく) 常にまったく同じセルを設定します。これは、セルが行でオフセットされることはないためです。

だからあなたが電話するとき

 If i = ((4 Mod 2) <> 0) Then
        setRawData1    'write to same row every time...
    Else
        setRawData2     'write to same row every time...
    End If

関数を次のように変更することをお勧めします。

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

そして、それぞれに正しいオフセット値を渡します

于 2013-02-07T20:24:43.600 に答える