Sub TEST1()
'別シートの合計値を算出
Worksheets("Sheet1").Cells(2, "A") = WorksheetFunction.SumIf(Worksheets("Sheet2").Range("A:A"), "B", Worksheets("Sheet2").Range("B:B"))
End Sub
ちょっと長いので、「With」でくくっておきます。
「With」でくくる
Sub TEST2()
'別シートの合計値を算出
With Worksheets("Sheet2")
Worksheets("Sheet1").Cells(2, "A") = WorksheetFunction.SumIf(.Range("A:A"), "B", .Range("B:B"))
End With
End Sub
Sub TEST3()
'シート番号を使って、別シートの合計値を算出
With Worksheets(2)
Worksheets("Sheet1").Cells(2, "A") = WorksheetFunction.SumIf(.Range("A:A"), "B", .Range("B:B"))
End With
End Sub
参照したいシートが「2番目」なので、「Worksheets(2)」としています。
Sheet2を用意しておきます。
では、VBAコードを実行してみます。
「シート番号」を使って別シートを参照できました。
全シートをループして参照する
全シートをループして参照するには、先ほどとの「シート番号」を使って、ループすることができます。
全シートをループして参照
Sub TEST4()
'シートをループ
For i = 2 To 5
'別シートの合計値を算出
With Worksheets(i)
Worksheets("Sheet1").Cells(i, "A") = WorksheetFunction.SumIf(.Range("A:A"), "B", .Range("B:B"))
End With
Next
End Sub
Sheet1~Sheet5を用意しておきます。
Sheet1~Sheet5を用意
では、VBAコードを実行してみます。
全シートをループして合計値を参照
「全シート」をループして合計値を参照できました。
「最終シート」を取得してループ
全シートをループしたい場合は、「最終シート」を取得してループすると便利です。
Sub TEST5()
'最終シートまでループ
For i = 2 To Worksheets.Count
'別シートの合計値を算出
With Worksheets(i)
Worksheets("Sheet1").Cells(i, "A") = WorksheetFunction.SumIf(.Range("A:A"), "B", .Range("B:B"))
End With
Next
End Sub
では、VBAコードを実行してみます。
「最終シート」を取得してループできました。
「For Each」を使ってループ
「For Each」を使ってループすることもできます。
「Worksheets」をコレクションにして、全シートをループすることができます。
Sub TEST6()
i = 1
'すべてのシートをループ
For Each a In Worksheets
'Sheet1のシートではないとき
If a.Name <> "Sheet1" Then
i = i + 1 'カウントアップ'別シートの合計値を算出
Worksheets("Sheet1").Cells(i, "A") = WorksheetFunction.SumIf(a.Range("A:A"), "B", a.Range("B:B"))
End If
Next
End Sub
Sub TEST7()
'別シートの合計値を算出
Worksheets("Sheet1").Cells(2, "A") = "=SUMIF(Sheet2!A:A,""B"",Sheet2!B:B)"
Worksheets("Sheet1").Cells(2, "A").Value = Worksheets("Sheet1").Cells(2, "A").Value '値に変換
End Sub
Sub TEST8()
'シートをループ
For i = 2 To 5
a = Worksheets(i).Name 'シートの名前'別シートの合計値を算出
Worksheets("Sheet1").Cells(i, "A") = "=SUMIF(" & a & "!A:A,""B""," & a & "!B:B)"
Worksheets("Sheet1").Cells(i, "A").Value = Worksheets("Sheet1").Cells(i, "A").Value '値に変換
Next
End Sub
Sheet1~Sheet5を用意しておきます。
Sheet1~Sheet5を用意
では、VBAコードを実行してみます。
全シートを参照して合計値を取得
全シートを参照して「"B"」に一致するセルの合計値を、取得できました。
「最終シート」を取得してループ
「For」を使って、全シートをループする場合は、「最終行」を取得が必要です。
最終行を「Worksheets.Count」で取得してループします。
Sub TEST9()
'最終シートまでループ
For i = 2 To Worksheets.Count
a = Worksheets(i).Name
'別シートの合計値を算出
Worksheets("Sheet1").Cells(i, "A") = "=SUMIF(" & a & "!A:A,""B""," & a & "!B:B)"
Worksheets("Sheet1").Cells(i, "A").Value = Worksheets("Sheet1").Cells(i, "A").Value '値に変換
Next
End Sub
では、VBAコードを実行してみます。
「最終シート」を取得してループできました。
「For Each」を使ってループ
「For Each」を使ってループすることもできます。
「Worksheets」をコレクションとして、全シートをループします。
入力シートをループした場合は、スキップするようにします。
Sub TEST10()
i = 1
'最終シートまでループ
For Each a In Worksheets
'Sheet1ではないとき
If a.Name <> "Sheet1" Then
i = i + 1 'カウントアップ'別シートの合計値を算出
Worksheets("Sheet1").Cells(i, "A") = "=SUMIF(" & a.Name & "!A:A,""B""," & a.Name & "!B:B)"
Worksheets("Sheet1").Cells(i, "A").Value = Worksheets("Sheet1").Cells(i, "A").Value '値に変換
End If
Next
End Sub