Excelブックに含まれる複数シートの一括処理

概要

実現方法・説明

Excel文書ファイルに含まれる複数シートを順次読み出して処理したい場合があると思います。
例えば、各月の売上を1シートずつ記入している場合は、年で集計したいとき、各シートの月間データを参照して合算したいですよね。

そんなときのやり方を簡単な例を使って説明します。

Excelのブックとシートの関係

まず、ブックとシートの関係を理解しましょう。

Excelは、オブジェクトの集まりです。

オブジェクトの集まりとか言われると
ぞっとしてしまう人たちがいるかもしれないけれど
難しく考えなくて大丈夫です。

オブジェクトという言葉はパーツに置き換えて理解するといいです。
言い換えれば、Excelはパーツの集まり、ということですね。

パーツの集まりとしてイメージ出来るようになると
簡単に処理を考えることが出来るようになります。

今回はブックとシートの関係を理解すると
ブックに含まれるシートの処理が理解しやすいです。

Excelの文書ファイルは、ブックです。
そしてご存じの通り、ブックの中には、シートがあります。
ひとつのブックにシートは複数持つことが出来ます。

こんな感じ(ブックにシートが3つあるときのイメージ)

BOOK:ブックオブジェクト
Sheet1~3:シートオブジェクト

さらに、シートの中にはセルがありますね
ひとつのシートにセルは複数持つことが出来ます。

ブックとシートを操作するVBAの例

このようにExcelはオブジェクトの集まりで出来ています。
そしてVBAで何かするときは、オブジェクトに対して何かする、ということになります。

例えば、ブックに含まれているシートの名前をすべて表示する処理は以下のようになります。
(ブックはあらかじめ開いている前提の処理です。)

Sub sample()

    'bはブックオブジェクト型
    Dim b As Workbook
    'sはシートオブジェクト型
    Dim s As Worksheet
    
    'bにブックオブジェクトの実体をセット
    Set b = Workbooks("samplebook01.xlsm")

    'bに含まれるシートオブジェクトを
    'ひとつずつ取り出してsにセットし順次処理
    For Each s In b.Worksheets
        'シートの名前をデバッグコンソールに表示
        Debug.Print s.Name
    Next
    
    End

End Sub

使用例

Excel文書ファイルに含まれるシートを順次参照しながら処理をする例で説明します。

例で使用するExcel文書ファイル

以下のExcel文書ファイルを例(入力)として使用します。
・文書ファイル名:samplebook01.xlsm
・5つのシートで構成
 (シート名:2020-01~2020-05)
・シートの内容:全シート共通、年月毎の金額を保持
 (年月セル:B1 金額セル:B2)

例で作成するプログラムの仕様

・Excel文書ファイルに含まれるすべてのシートについて年月と金額を表示
・表示した金額の合算を表示
・処理終了後、終了のメッセージボックスを表示

具体的なExcel文書ファイルの内容

シート名:2020-01



シート名:2020-02



シート名:2020-03



シート名:2020-04



シート名:2020-05



サンプルプログラム

Sub sample()

    'bはブックオブジェクト型
    Dim b As Workbook
    'sはシートオブジェクト型
    Dim s As Worksheet
    
    'bにブックオブジェクトの実体をセット
    Set b = Workbooks("samplebook01.xlsm")

    'シート毎の年月と金額
    Dim ym As String
    Dim amount As Currency
    
    '金額合計
    Dim total As Currency
    total = 0
    
    'bに含まれるシートオブジェクトを
    'ひとつずつ取り出してsにセットし順次処理
    For Each s In b.Worksheets
    
        'シート毎の処理
        '年月の取得
        ym = s.Cells(1, 2)
        '金額の取得
        amount = Val(s.Cells(2, 2))
        '金額合計
        total = total + amount
                
        'シート内容の表示(年月と金額)
        Debug.Print ym, Format(amount, "###,###,###")
        
    Next
    
    '金額合計の表示
    Debug.Print "合計", Format(total, "###,###,###")
    
    MsgBox "おわり"
    
    End

End Sub

実行結果



コード説明

全体的な説明は、コード中のコメントを参照ください。
今回のテーマである「ブックとシートの関係」で大切な部分は
・9行めでブックオブジェクトを取得して設定
・21行めでブックに含まれるシートを一つずつ取り出して繰り返し処理
をしているところになります。

今回の例ですと、23行~32行めまでがシート単位の処理になります。
業務でコードを書く場合、この部分はサブ化した方がいいと思います。

補足

VBAでフォルダ内に保存された複数のExcel文書ファイルを開いて中のシートを自由自在に取り回し出来るようになると、様々な事務処理を自動化することが出来ます。
人手で何日もかかっていたことが1時間で終わったりするようになるかもしれません。
ぜひ、いろいろ試してみてください。

タイトルとURLをコピーしました