VBAのボタンを作る前に — 共通入力と再実行の境界を考える

LWP | VBAのボタンを作る前に―共通入力と再実行の境界を考える

VBAのボタンを作る前に―共通入力と再実行の境界を考える

StageとWorkflowを分け、待ち時間と途中失敗を扱う

ストーリー

コイ丸先輩が用意した二つの帳票ボタン。どちらも分かりやすいのに、両方押すと入力取得まで二度走っていた。アユさんとデータの関係を描き直し、「一つのボタンは何を実行するのか」を考える。

共通入力を再利用できる業務を想定した設計例です。入力30分、帳票1が2分、帳票2が10分という時間は仮定。直列実行で、保存・読込の追加時間を省いた計算です。72分と42分を実機の性能測定や一般的な高速化率として扱いません。

1 欲しい帳票と共通入力

成果物を作る前に、共通入力との関係を描く。

図1|成果物を作る前に、共通入力との関係を描く。

2 同じ30分を二度待つのか

入力再利用が可能な条件で、重複取得の待ち時間を比べる。

図2|入力再利用が可能な条件で、重複取得の待ち時間を比べる。

3 Stageは意味のある一区間

再利用・分岐・停止・再実行から基本区間を決める。

図3|再利用・分岐・停止・再実行から基本区間を決める。

4 所有と共通部品の呼出し

業務処理の責務と汎用関数の再利用を分ける。

図4|業務処理の責務と汎用関数の再利用を分ける。

5 一括ボタンはStageを組み合わせる

基本区間と便利な一括操作を両立する。

図5|基本区間と便利な一括操作を両立する。

6 昨日の入力で今日の帳票?

後続区間は、入力の鮮度と開始条件を確認する。

図6|後続区間は、入力の鮮度と開始条件を確認する。

7 失敗した途中結果を渡さない

完成状態の確定と後続停止を、分割設計と一緒に考える。

図7|完成状態の確定と後続停止を、分割設計と一緒に考える。

まとめ

ボタンの数や名前を決める前に、入力・出力と依存関係を描きます。再利用できる完成データ、分岐、意味のある停止位置、再実行の目的から基本の実行区間を決め、便利な一括操作は既存区間の組み合わせとして追加します。

今回の仕掛け

Stageは今回の記事で呼ぶ基本実行区間です。トップレベルの業務処理の責務を一つの区間へ置くことと、汎用関数を複数の区間から呼ぶことを区別します。似た呼出しツリーがあるだけでは設計不良とは判断しません。

Workflowは複数のStageを順に呼ぶ実行の段取りです。入力更新だけ、帳票1だけ、最新化して帳票1、一括実行など、利用者の目的・権限・頻度に合わせて入口を選べます。ノードの数だけボタンを増やす必要はありません。

入力を再利用するなら、対象期間・最終成功日時・入力件数・取得元を保ち、後続の開始条件を確認します。毎回最新の入力が必要な業務では、再利用の可否を先に判断します。

Subの分割だけでは原子的な更新やロールバックは保証されません。一時領域で取得・整形し、成功時だけ共通入力を置換するのは設計案です。途中失敗では後続を止め、再実行時の重複出力を防ぐ仕組みも実装します。

今回のソースコードのサンプル

サンプルコード 既存Stageを朝のWorkflowから順に呼ぶ

01

Option Explicit

02

03

Public Sub Workflow_Morning()

04

    Stage_Input

05

    Stage_Report1

06

End Sub

07

08

Private Sub Stage_Input()

09

    Debug.Print "入力Stage(説明用)"

10

End Sub

11

12

Private Sub Stage_Report1()

13

    Debug.Print "帳票1Stage(説明用)"

14

End Sub

関数の説明

Subは処理をまとめた手続きです。Workflow_MorningからStage_InputとStage_Report1を順に呼びます。Debug.Printはイミディエイトウィンドウへ文字を出します。[Callと手続き呼出し](https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/call-statement)

コードの説明

Workflow_Morningは呼出し順だけを持ちます。二つのStageの内部処理をWorkflowへ再実装せず、既存の入口を利用します。このサンプルには未定義のStageを残さず、表示だけの本体を用意しています。

入力・概要

Excel VBAの標準モジュールへ全体を貼り付ける説明用サンプルです。TakiLibは不要です。帳票生成・実データ更新・鮮度検査・失敗時の状態管理は実装していません。実ブックの実行・性能測定は未実施です。

結果

Workflow_Morningを実行すると、イミディエイトウィンドウへ「入力Stage(説明用)」「帳票1Stage(説明用)」の順で表示する構成です。

読むポイント

実務の本体をStageに置き、Workflowには段取りを置く関係を見てください。単独ボタンから同じStageを呼ぶ構成も作れます。

出典メモ

元ネタ:[採用原稿 260913_VBA_ボタン設計_データフロー.md](<C:/LWP/記事制作/01_記事ネタ/archive/260913_VBA_ボタン設計_データフロー.md>)。2026年10月4日に原稿全文と追補を確認し、中心主題を選んで再構成しました。会社・人物・業務データは創作・説明用です。

技術の仕様は原資料と一次資料に照合しました。サンプルと図の結果はソース・仕様・計算に基づく予測で、Excel実機の動作確認済みとはしていません。

Copyright © 2026 LWP 山中 一弘

本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。