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】シフト表ツールの仕組みの工夫3選|一括処理・ボタンの自動配置・人時売上の集計

8 時間前
読了時間: 4分

まずは動画で、3つの工夫の全体をご覧ください(動画内のデータはサンプルで、金額などの数字は説明用の例です)。

同じ動画は、YouTubeでも2026年12月3日 12:00に公開します。

業務で使うExcelツールは、中心の処理のほかに、「操作をまとめる」「入力を楽にする」「結果を数字で確かめる」といった周りの仕組みで使いやすさが決まると感じています。

この記事では、飲食店向けに納品したシフト作成ツール(Excel VBA)から、そうした仕組みの工夫を3つ紹介します。

この記事で紹介する3つの工夫。ボタン1つの一括処理、ボタンを自動で並べる入力画面、シフトから人時売上を出す集計

コードは、考え方が伝わるように短く書き直したものです。納品したコードそのものではありません。

 

工夫1:店の数だけの手順をボタン1つにまとめる

複数店舗のシフトでは、希望の反映、日別の割り当て、時間別の配置という手順を、店の数だけ繰り返す必要があります。

同じ手順を店の数だけ繰り返す必要がある

そこで、手順を1つのボタンにまとめました。シートを店の数だけ用意し、前の期間のシフトを読み込んでから、設定された店の処理順に繰り返します。

シートを店の数だけ用意し、前の期間を読み込んでから、店の処理順に繰り返す

大事なのは「途中の止めどころ」です。複数の店を掛け持ちする人がいるので、途中の店で全員の割り当てを決めきると、次の店で使える人がいなくなります。

途中の店では、残りの人を空けておきます。最後の店の処理で初めて、正社員は残りを出勤に、それ以外は休みに決めきります。処理の順番と、どこで決めきるかを設計しておくことで、単純なループでは解決できない部分をまとめられます。

途中の店では残りを空けておき、最後の店で決めきる

ボタン1つの中で前の期間のシフトも読み込みます。読み込みの仕組みは「前の期間を名前で読み込む」で紹介しています。店どうしのシートのつなぎ方は、「複数店舗のシフトをシートでつなぐ」で解説しています。

 

 

工夫2:選択肢の一覧からボタンを自動で並べる

ユーザーフォームのボタンを手で作ると、選択肢が変わるたびに作り直しになります。ボタンの数だけクリックの処理も必要です。

選択肢が変わるたびにボタンを作り直す必要がある

そこで、選択肢の一覧から、ボタンを実行時に作るようにしました。縦の個数を決めておくと、横の個数は計算で出ます。

たとえば選択肢が8個で縦が3個なら、(8-1)÷3を切り捨てて2、そこに1を足して横は3個です。

選択肢の一覧から、縦と横の個数を計算してボタンを並べる

ボタンを増やしたときに問題になるのがクリックの処理です。ここでは、WithEventsを持つクラスを1つ作り、ボタン1個につきこのクラスを1個ずつ割り当てます。

フォーム側では、作ったクラスを配列に入れて持ち続けます。プロシージャの中の変数にしか持っていないと、処理が終わった時点でクラスが消えて、クリックに反応しなくなるからです。

クリックの処理はクラスの中の1か所だけなので、ボタンが何個に増えても、処理を書き足す必要はありません。

クリックは1つのクラスで受ける。ボタンが何個でも処理は1か所

実際のツールでは、セルをダブルクリックするとその場でボタンが出て、選ぶだけで入力できます。同じ作り方で、日付のボタンを並べるカレンダーの入力画面も作っています。

実際の画面。ダブルクリックでその場にボタンを出して入力する(データはサンプル)

選べる時刻だけをボタンで出す使い方は、「希望入力を速くする工夫」で紹介しています。

 

 

工夫3:30分1行の記録から、平均時給と人時売上を出す

シフトが変わるたびに、店ごとの平均時給や人時売上を計算し直すのは大変です。

このツールでは、割り当ての結果を「誰が・どの店で・どの30分に」働くかの記録として、30分=1行で持っています。集計は、この記録から店ごとに絞り込んで計算するだけです。

30分1行の記録から店ごとに集計する(金額は説明用の例)

計算式は次のとおりです。

  • 平均時給 = 時給×労働時間の合計 ÷ アルバイトの労働時間

  • 人時売上 = 想定売上 ÷ 全員の労働時間

  • 希望の達成率 = 労働時間 ÷ 希望時間

平均時給は、アルバイトだけで計算しています。人時売上は全員の労働時間で割るので、分母にする労働時間が2つの指標で違います。この切り分けも、1人1行の表ではなく明細の記録を持っているから簡単にできます。

人時売上と希望の達成率も同じ記録から計算する(数字は説明用の例)

ボタン1つで店舗ごとの数字が確かめられるので、シフトを直しながら数字を見て判断できます。

店舗ごとの数字を一覧で確かめる(イメージ図。数字は説明用の例)

30分1行の記録の持ち方は、「ブックをまたぐ年間集計」でも紹介しています。

 

ほかの業務への応用

  • 手順の順番と止めどころを決める:月次の締め作業、部署ごとの帳票

  • 一覧からボタンを並べる:カレンダー、担当者の選択、商品や工程の選択

  • 記録を1行ずつ持つ:部門別の原価、機械や設備の稼働率、案件ごとの工数

 

動画で見る

それぞれの工夫は、YouTubeのショート動画でもご覧いただけます。

 

まとめ

  • 一括処理は、手順をつなぐだけでなく「途中の店では残し、最後の店で決めきる」という止めどころまで設計する

  • ボタンは一覧から実行時に作り、WithEventsを持つ1つのクラスでクリックを受ける。クラスはフォームの配列に持ち続ける

  • 割り当ての記録を30分1行で持っておくと、平均時給や人時売上など、分母の違う集計も簡単に切り替えられる

中心の処理だけでなく、周りの仕組みまで作り込むと、ツールが現場で使い続けられやすくなります。私の経験上、業務に合わせたツールづくりで差が出やすいところの一つです。

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

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

softex-celwareロゴ 透過 横長.png

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

  • Facebook
  • Twitter
  • YouTube

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

bottom of page