Excelのシート数をカウントしたいときはないでしょうか。
けど、そんな中で悩むことは、
・複数の別ブックのシート数をカウントしたいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・VBAで複数の別ブックのシート数をカウントする方法
についてまとめます!
もくじ
Excelのシート数をカウントするイメージ
Excelのシート数をカウントするイメージについて説明をします。
まず、Excelのワークシート関数でシート数を取得します。
次にVBAで複数の別ブックのシート数を一括でカウントしていきます。
複数のブックを処理したいときに便利ですね。
早速実装して試してみましょう。
シートを用意する
Excelブックのシートをいくつか作成しましょう。
サンプルでは5つのシートと別ブックで2つと3つのシートをそれぞれ用意しました。
ワークシート関数でシート数をカウントする
ワークシート関数でシート数をカウントする方法について説明をします。
シート数を取得する関数はSHEETS関数となります。
SHEETS関数の書式/機能/引数
関数名 | SHEETS |
---|---|
機能 | 参照内のシート数を返します。 |
書式 | =SHEETS([範囲]) |
引数 | 範囲 :情報が必要なシート及びセルを指定します。 省略すると、現ブックのシート情報が返されます。 |
SHEETS関数は参照範囲のシート数を返す関数で、パラメータを省略するとブック全体のシート数、シート範囲を指定するとその範囲に絞り込んだシート数を取得することができます。
関数を実装してシート数を取得する
関数を実装してシート数を取得してみましょう。
以下の数式をA1セルへ入力します。
=SHEETS()
はい、シート数が取得されましたね。
続いてシートの範囲を指定してみましょう。
=SHEETS(Sheet1:Sheet3!B1)
Sheet1~Sheet3のシート数を取得します。「~」の部分は「:」とし、開始シートを前に、後ろに終了シートを指定します。
なお、範囲はシート名以外にセルを指定する必要があるので、適当なセルを入力します。
はい、指定範囲のシート数が取得できましたね。
VBAでで別ブックのシート数をカウントする
次はVBAで複数の別ブックのシート数をカウントする方法について説明をします。
対象のブックは以下の2つです。
これらのシート数をVBA実行元のブックの1番目のシートへ出力していきます。
VBAコード
VBAは以下の通りです。
Sub 複数のブックのシート数を取得する()
Dim objWb As Workbook
Dim i As Integer
Dim arrBookPass(1) As String
Dim strBookPass As Variant
Dim objExpSheet As Object
'ブックのパスを指定します。対象ブックを増やす場合は配列を増やしてください。
arrBookPass(0) = "F:\test\別ブック1.xlsx"
arrBookPass(1) = "F:\test\別ブック2.xlsx"
'カウント数出力先のシートを指定します。
Set objExpSheet = ThisWorkbook.Sheets(1)
'出力開始行数を指定します。
i = 2
'配列の件数分処理を繰り返します。
For Each strBookPass In arrBookPass
'ブックファイルのパスを指定します。
Set objWb = Workbooks.Open(strBookPass)
With objExpSheet
'ブックオブジェクトからブック名を取得、セルへ代入します。
.Cells(i, 1) = objWb.Name
'Sheetsコレクションからシート数を取得しシート数をセルへ代入します。
.Cells(i, 2) = objWb.Sheets.Count
End With
i = i + 1
'ブックを閉じます。
objWb.Close
Next
'オブジェクトを解放します。
Set objWb = Nothing
End Sub
VBAを設定する
VBAの設定をしていきましょう。
ブックのパスを指定します。環境に応じて変更をしてください。
また対象ブックを増やす場合は配列を増やしてください。
arrBookPass(0) = "F:\test\別ブック1.xlsx"
arrBookPass(1) = "F:\test\別ブック2.xlsx"
カウント数出力先のシートを指定します。
サンプルではVBA実装ブックの1番目のシートになります。
Set objExpSheet = ThisWorkbook.Sheets(1)
出力開始行数を指定します。
サンプルは2行目の指定になります。
i = 2
VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
VBAを実行
VBAを実行しましょう。
はい、各ブックのシート数が出力されましたね。
VBAの説明
VBAについて説明をします。
配列の件数分処理を繰り返します。
For Each strBookPass In arrBookPass
ブックファイルのパスを指定します。
Set objWb = Workbooks.Open(strBookPass)
ブックオブジェクトからブック名を取得、セルへ代入します。
.Cells(i, 1) = objWb.Name
Sheetsコレクションからシート数を取得しシート数をセルへ代入します。
.Cells(i, 2) = objWb.Sheets.Count
ブックを閉じます。
objWb.Close
オブジェクトを解放します。
Set objWb = Nothing
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・VBAで複数の別ブックのシート数をカウントする方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す