'WorksheetFunctionで別シートを参照
With Worksheets("Sheet2")
Worksheets("Sheet1").Cells(2, "A") = WorksheetFunction.CountIf(.Range("A:A"), "B")
End With
'数式埋め込みで別シートを参照
Worksheets("Sheet1").Cells(2, "A") = "=COUNTIF(Sheet2!A:A,""B"")"
Sub TEST3()
'シート番号を使って、別シートの合計値を算出
With Worksheets(2)
Worksheets("Sheet1").Cells(2, "A") = WorksheetFunction.CountIf(.Range("A:A"), "B")
End With
End Sub
別シートを用意しておきます。
では、VBAコードを実行してみます。
結果は、「3」個となりました。
「シート番号」を使って別シートを参照できています。
全シートをループして参照する
全シートを参照するには、シート番号を変数として、ループします。
全シートをループして参照する
Sub TEST4()
'シートをループ
For i = 2 To 5
'別シートの合計値を算出
With Worksheets(i)
Worksheets("Sheet1").Cells(i, "A") = WorksheetFunction.CountIf(.Range("A:A"), "B")
End With
Next
End Sub
Sheet1~Sheet5を用意しておきます。
Sheet1~Sheet5を用意
では、VBAコードを実行してみます。
全シートを参照してカウント
全シートを参照して「"B"」の数をカウントできました。
「シートの数」を取得してループ
全シートをループしたい場合は、「シートの数」を取得してループすると便利です。
シートの数は「Worksheets.Count」で取得できます。
Sub TEST5()
'最終シートまでループ
For i = 2 To Worksheets.Count
'別シートの合計値を算出
With Worksheets(i)
Worksheets("Sheet1").Cells(i, "A") = WorksheetFunction.CountIf(.Range("A:A"), "B")
End With
Next
End Sub
では、VBAコードを実行してみます。
「シートの数」を取得してループできました。
「For Each」を使ってループ
「For Each」を使って全シートをループすることもできます。
Sub TEST6()
i = 1
'すべてのシートをループ
For Each a In Worksheets
'Sheet1のシートではないとき
If a.Name <> "Sheet1" Then
i = i + 1 'カウントアップ'別シートの合計値を算出
Worksheets("Sheet1").Cells(i, "A") = WorksheetFunction.CountIf(a.Range("A:A"), "B")
End If
Next
End Sub
では、VBAコードを実行してみます。
「For Each」を使って全シートを参照できました。
埋め込み数式を使ってCountIf関数で別シートを参照
次は、「埋め込み数式」を使って「CountIf関数」で「別シート」を参照してみます。
埋め込み数式で別シートを参照
埋め込み数式で別シートを参照して、「"B"」の数をカウントしてみます。
ポイントは、「"B"」を「"」で囲んで「""B""」とするところです。
Sub TEST7()
'別シートの合計値を算出
Worksheets("Sheet1").Cells(2, "A") = "=COUNTIF(Sheet2!A:A,""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") = "=COUNTIF(" & a & "!A:A,""B"")"
Next
'値に変換
Worksheets("Sheet1").Range("A2:A5").Value = Worksheets("Sheet1").Range("A2:A5").Value
End Sub
Sub TEST9()
'最終シートまでループ
For i = 2 To Worksheets.Count
a = Worksheets(i).Name
'別シートの合計値を算出
Worksheets("Sheet1").Cells(i, "A") = "=COUNTIF(" & a & "!A:A,""B"")"
Next
'値に変換
Worksheets("Sheet1").Range("A2:A" & Worksheets.Count).Value = Worksheets("Sheet1").Range("A2:A" & Worksheets.Count).Value
End Sub
では、VBAコードを実行してみます。
「シートの数」を取得して全シートを参照できました。
「For Each」を使ってループ
「For Each」を使って全シートをループすることもできます。
Sub TEST10()
i = 1
'最終シートまでループ
For Each a In Worksheets
'Sheet1ではないとき
If a.Name <> "Sheet1" Then
i = i + 1 'カウントアップ'別シートの合計値を算出
Worksheets("Sheet1").Cells(i, "A") = "=COUNTIF(" & a.Name & "!A:A,""B"")"
End If
Next
'値に変換
Worksheets("Sheet1").Range("A2:A" & i).Value = Worksheets("Sheet1").Range("A2:A" & i).Value
End Sub