top of page

​タグ一覧

配列処理(76)

シート・セル操作(37)

ファイル操作(33)

階層化フォーム(33)

開発事例(31)

図形操作(29)

設計思想(15)

ユーザーフォーム(12)

シフト表(12)

講座実施報告(12)

数学(11)

イベントプロシージャ(10)

開発効率化(10)

コード自動生成(10)

GAS(10)

技術解説(9)

ココナラ(9)

文字列操作(8)

Webアプリ(8)

Googleスプレッドシート(6)

その他(5)

アニメーション(5)

副業(5)

介護・福祉(5)

OneDrive(4)

条件付き書式(4)

イミディエイトウィンドウ(4)

クリップボード(4)

小説(3)

日報(3)

JavaScript(3)

PDF(3)

HTML(3)

公開ツール(3)

クラスモジュール(2)

コード解説(2)

パズル(2)

小ネタ(2)

フリーランス(2)

Antigravity(2)

カレンダー(2)

Enum(2)

医療(2)

LookerStudio(2)

リスキリング(2)

Discord(2)

Outlook(2)

デスクトップアプリ(2)

スクレイピング(1)

WebAPI(1)

PowerShell(1)

文書作成(1)

スプレッドシート(1)

経理(1)

超勉強会(1)

溶接ロボット(1)

楽天市場(1)

VBA不使用(1)

実行予約(1)

CAD(1)

給与計算(1)

QRコード(1)

python(1)

学校(1)

発注書(1)

【Excel VBA 実装例】24個のファイルにまたがる年間労働時間をボタン1つで集計する

4 時間前
読了時間: 5分

まずは動画で、考え方と実際の画面をご覧ください(動画内のデータはサンプルです)。

年間の労働時間、ファイルをまたいで手で数えていませんか。

この記事は、飲食店向けに納品したシフト作成ツール(Excel VBA)で使った工夫を紹介するシリーズの2回目です。シリーズ1回目の「時間帯別の自動配置」では、シフトを時間帯ごとに自動で割り振る仕組みを紹介しました。今回は、ブックをまたいで1年分の労働時間を集計する仕組みです。

この記事で紹介するポイントは次のとおりです。

  • どのブックにも、30分を1行にした記録用のシートを同じ形で持たせる

  • 集計は、別に用意した集計用のブックが受け持つ

  • シフトのブックからは Application.Run で集計を呼び出し、残り時間を計算する

 

課題:1年分が24個のファイルに分かれる

このシフト表は、半月ごとに別のブックで作ります。1か月に前半・後半の2つ、それが12か月分なので、1年分の労働時間は24個のファイルにまたがります。

1年分が24個のファイルに分かれる

扶養の範囲など、年間の労働時間に上限があるスタッフのシフトを組むときは、「今年あと何時間働けるか」を見ながら組む必要があります。ところが、その数字を出すには、24個のファイルを開いて1つずつ数える必要があります。これをボタン1つで出せるようにしました。

 

アイデア1:30分を1行にした記録用シート

まず、どのシフトのブックにも、30分を1行にした記録用のシートを同じ形で持たせました。列は「社員番号・日付・時刻・出勤」の4つで、1日分・全員分のシフトが縦に並びます。

30分を1行にした記録用シート

この形にしておくと、労働時間の計算がかんたんになります。

  • ある人のある日の行を数える(図の例では16行)

  • 行数に0.5を掛ける(16 × 0.5 = 8.0時間)

見た目のシフト表(人ごと・日ごとに時刻が横に並ぶ表)は人が読むための形で、集計には向きません。集計用には、1行に1つの記録が入る縦に長い表を別に持たせておく、というのがこの工夫の土台です。どのブックでも同じ形にしておくことで、あとでまとめて読み込めます。

 

アイデア2:集計は専用のブックにまかせる

集計は、シフトのブックとは別に用意した集計用のブックが受け持ちます。

集計は専用のブックにまかせる

集計用のブックがしていることは、次の流れです。

  1. 同じフォルダから、今年のシフトのブックをファイル名で探す

  2. 見つけたブックを1つずつ開く

  3. 記録用のシートを読み、社員ごと・月の前半後半ごとに労働時間を足し込む

  4. 社員ごとの年間の表にまとめる

シフトのブックは「シフト作成 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秒で集計しています。

11個のブックを約22秒で集計

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

集計用ブックの月ごとの集計

 

応用のヒント:ファイルが分かれた集計に使える

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

ファイルが分かれた集計に使える
  • 月ごとの売上ブック:12か月分を開いて、年間の売上を集計する

  • 日報・作業記録:1日1ファイルの記録から、人ごとの時間を集計する

  • 店舗・部署ごとのファイル:同じ形のブックを集めて、全体を集計する

ポイントは、「記録は縦に長い表で残す」「集計は専用のブックにまかせる」の2つです。

 

動画で見る

この回の内容は、YouTubeのショート動画でもご覧いただけます。

 

まとめ

半月ごとに分かれたシフトのブックから年間の労働時間を出すために、次の3つを組み合わせました。

  • どのブックにも、30分を1行にした記録用のシートを同じ形で持たせる(行数 × 0.5 = 労働時間)

  • 集計は専用のブックが受け持ち、同じフォルダから今年のブックを探して月ごとに足し込む

  • シフトのブックから Application.Run で集計を呼び出し、上限からの残り時間を出す

ファイルが分かれていること自体は、運用上の理由があることが多いと思います。私の経験上、ファイルの分け方を変えるよりも、「集計しやすい形の記録をどのファイルにも残しておく」ほうが、今の運用を崩さずに年間の集計を楽にできます。ファイルをまたぐ集計で手間がかかっている方の参考になればうれしいです。

その作業、自動化できるかもしれません

毎月くり返している集計・転記・帳票づくりに何日もかかっていませんか。
Excelはそのままで、面倒な部分だけを自動化できます。ご相談は無料です。

softex-celwareロゴ 透過 横長.png

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2026 softex-celware。Wix.com で作成されました。

bottom of page