【Excel VBA 実装例】24個のファイルにまたがる年間労働時間をボタン1つで集計する
まずは動画で、考え方と実際の画面をご覧ください(動画内のデータはサンプルです)。
年間の労働時間、ファイルをまたいで手で数えていませんか。
この記事は、飲食店向けに納品したシフト作成ツール(Excel VBA)で使った工夫を紹介するシリーズの2回目です。シリーズ1回目の「時間帯別の自動配置」では、シフトを時間帯ごとに自動で割り振る仕組みを紹介しました。今回は、ブックをまたいで1年分の労働時間を集計する仕組みです。
この記事で紹介するポイントは次のとおりです。
どのブックにも、30分を1行にした記録用のシートを同じ形で持たせる
集計は、別に用意した集計用のブックが受け持つ
シフトのブックからは Application.Run で集計を呼び出し、残り時間を計算する
課題:1年分が24個のファイルに分かれる
このシフト表は、半月ごとに別のブックで作ります。1か月に前半・後半の2つ、それが12か月分なので、1年分の労働時間は24個のファイルにまたがります。

扶養の範囲など、年間の労働時間に上限があるスタッフのシフトを組むときは、「今年あと何時間働けるか」を見ながら組む必要があります。ところが、その数字を出すには、24個のファイルを開いて1つずつ数える必要があります。これをボタン1つで出せるようにしました。
アイデア1:30分を1行にした記録用シート
まず、どのシフトのブックにも、30分を1行にした記録用のシートを同じ形で持たせました。列は「社員番号・日付・時刻・出勤」の4つで、1日分・全員分のシフトが縦に並びます。

この形にしておくと、労働時間の計算がかんたんになります。
ある人のある日の行を数える(図の例では16行)
行数に0.5を掛ける(16 × 0.5 = 8.0時間)
見た目のシフト表(人ごと・日ごとに時刻が横に並ぶ表)は人が読むための形で、集計には向きません。集計用には、1行に1つの記録が入る縦に長い表を別に持たせておく、というのがこの工夫の土台です。どのブックでも同じ形にしておくことで、あとでまとめて読み込めます。
アイデア2:集計は専用のブックにまかせる
集計は、シフトのブックとは別に用意した集計用のブックが受け持ちます。

集計用のブックがしていることは、次の流れです。
同じフォルダから、今年のシフトのブックをファイル名で探す
見つけたブックを1つずつ開く
記録用のシートを読み、社員ごと・月の前半後半ごとに労働時間を足し込む
社員ごとの年間の表にまとめる
シフトのブックは「シフト作成 202501 前半」のように、年月と前半・後半が分かる名前にそろえておきます。こうしておくと、ファイル名から今年のブックだけを選び出せます。
集計の処理を各シフトのブックに持たせず、専用のブックに分けておくと、集計の処理を直したいときも1か所の修正で済みます。
アイデア3:呼び出して残り時間を出す
シフトのブックからは、Application.Run で集計用ブックのマクロを実行し、結果の表だけを受け取ります。受け取った累計を使って、社員ごとの残り時間を計算します。

残り時間は、次の式で出しています。
残り = 年間の上限 − 前月までの累計 − 同じ期間の別の日
録画の「従業員3」(6月前半の時点)の例では、次のようになります。
年間の上限:900.0時間
前月までの累計:790.0時間
同じ期間の別の日:72.0時間
残り:900.0 − 790.0 − 72.0 = 38.0時間
「同じ期間の別の日」を引いているのは、いま作っている半月のシフトのうち、すでに入っている他の日の分も差し引いておくためです。これで、シフトを組んでいる日に、あと何時間入れられるかが分かります。
実際のシフトのブックでは、社員ごとに「別日合計・前月累計・上限値・残り」が並びます。

実際の画面:11個のブックを約22秒で集計
録画では、11個のブックを約22秒で集計しています。

集計用のブックには、社員ごとに年間労働時間と、月ごとの前半・後半の労働時間が並びます。

応用のヒント:ファイルが分かれた集計に使える
記録を縦に長い表で残しておけば、ファイルが分かれた別の集計にも同じ考え方が使えます。

月ごとの売上ブック:12か月分を開いて、年間の売上を集計する
日報・作業記録:1日1ファイルの記録から、人ごとの時間を集計する
店舗・部署ごとのファイル:同じ形のブックを集めて、全体を集計する
ポイントは、「記録は縦に長い表で残す」「集計は専用のブックにまかせる」の2つです。
動画で見る
この回の内容は、YouTubeのショート動画でもご覧いただけます。
24ファイルの年間集計をボタン1つで|Excel VBA 実装例(ショート)(2026年11月19日公開)
【Excel VBA】シフト表ツールの工夫6選(本編)(2026年11月17日公開)
まとめ
半月ごとに分かれたシフトのブックから年間の労働時間を出すために、次の3つを組み合わせました。
どのブックにも、30分を1行にした記録用のシートを同じ形で持たせる(行数 × 0.5 = 労働時間)
集計は専用のブックが受け持ち、同じフォルダから今年のブックを探して月ごとに足し込む
シフトのブックから Application.Run で集計を呼び出し、上限からの残り時間を出す
ファイルが分かれていること自体は、運用上の理由があることが多いと思います。私の経験上、ファイルの分け方を変えるよりも、「集計しやすい形の記録をどのファイルにも残しておく」ほうが、今の運用を崩さずに年間の集計を楽にできます。ファイルをまたぐ集計で手間がかかっている方の参考になればうれしいです。

