「更新ボタン」があるから事故が起きる。Web APIとVBAで”正常性バイアス”を排除する「完全全自動ガントチャート」の作り方【新春連載:「卒Excel」ロードマップ 完結編】

※この記事は、筆者(上野)の過去の個人的な実体験に基づき、製造業におけるデータ活用の課題と「伴走支援」の重要性について考察したものです。ケーエスピー株式会社の公式な見解や、特定の企業様(過去の在籍企業を含む)を批判・評価する意図は一切ございません。

こんにちは、システムエンジニアの上野です。

全3回でお届けしている「卒Excel」ロードマップ、いよいよ完結編です。 今回は、私が製造業の現場にいた頃に作成し、実際に運用していた「ガントチャート」のコードを公開します。一部加筆していますが。

テーマは、「人間の『だろう運転』を、技術で強制的に排除する」です。


1. 「更新ボタン」は、責任の空白地帯を生む

システム開発のセオリーでは、画面のデータを最新にするための「更新(Refresh)」ボタンをつけるのが正解とされています。 しかし、現場において、このボタンは「事故の元」でしかありません。

なぜなら、更新ボタンは「いつでも押せる」からです。 「入力が終わった後」でも、「見る前」でも、「保存する前」でも押せてしまう。 この「任意性」が、現場に恐ろしい心理的バイアスを生みます。

「誰かが押してくれてるだろう」という罠

忙しい朝、工程表を開いた現場リーダーはこう思います。

  • 「まあ、担当の〇〇さんが入力した後に更新してるだろう
  • 「昨日誰かが保存した時点で、最新になってるだろう

そうやって誰もボタンを押さず、「反映されていない(古い)バー」を見て指示を出し、段取りを間違える。
普段は押しているのにその日は話しかけられて、押し忘れたたまま、段取りを間違える。
これが現場で起きる事故の正体でした。

悪いのは、更新を忘れた人間ではありません。 「情報の鮮度を、人間の『意志』や『記憶』に委ねている設計」そのものが間違っているのだと思いました。


2. なぜPower Queryではなく、あえてVBAなのか

最近のExcelには「Power Query」という便利な機能があり、Web上のデータを取得したり、表を加工したりできます。 「祝日データの取得」や「ガントチャートの集計」も、Power Queryで可能です。

しかし、私はあえて使いませんでした。 なぜなら、Power Queryも結局は「クエリの更新」というアクションが必要だからです。

「カレンダーが黒い」というだけで、人は騙される

特に危険なのが「祝日設定」です。 Power Queryで祝日を取ってくる仕組みを作ったとして、その更新頻度は「年に1回(年末)」くらいでしょう。 断言しますが、そんな低頻度のルーチンワーク、現場の人間(私)は100%忘れます。
というより、引継ぎを忘れて、そのファイルを使う人が冷や汗をかくことになる自信がありました。

もし更新を忘れて年を越すと、どうなるか。 「成人の日(祝日)」が、カレンダー上で「平日(黒字)」のまま表示されます。

これを見た担当者は、何の疑いもなく「よし、1月13日(成人の日)に出荷しよう」と計画を立てます。あるいは、「今週は5日間フルで稼働できるな」と勘違いし、パンパンの製造予定を詰め込みます。

そして直前になって気づくのです。 「あれ、この日、休みじゃん……」

出荷トラックの手配ミス、あるいは無理な工程による現場の残業地獄。 これらはすべて、「カレンダーが最新ではなかった」ことから始まる悲劇です。

だから私は決めました。 「人間を信じるな。ファイルを開いた瞬間、強制的にカレンダーを最新にしろ」

自動化の仕組み図解
▲ 人間の「うっかり」を、2つの自動化(APIとVBA)が物理的にブロックする仕組み。
(※イメージ図です。ナノバナナ(AI)で生成したら、壮大なサービス紹介風&文字崩れが発生しましたが、雰囲気で感じ取ってください)

3. 【コード公開】これが「強制自動化」の実装だ

これからお見せするのは、「ユーザーに1クリックもさせない(判断させない)」ためのVBAコードです。

① 開いた瞬間、強制的に祝日を取りに行く

まず、Workbook_Open(ファイルを開いた瞬間)に、以下のコードが走ります。 ユーザーが「更新しよう」と思わなくても、Excelが勝手にWeb APIを叩きに行きます。

これにより、「来年の祝日設定」というタスク自体が消滅します。 人間が忘れていても、プログラムは忘れません。祝日は常に赤く染まり、そこに予定を入れようとすれば「あ、休みか」と直感的に気づけます。

② 入力した瞬間、強制的にバーを引き直す

次に、ガントチャートの描画です。 「入力が終わったら更新ボタンを押す」という運用は、「押し忘れ」を生みます。 そこで、「セルの中身が変わった(Enterキーを押した)瞬間」を検知して、その行のバーを即座に描き変えるVBAを組みました。

これなら、「入力したのにバーが古い」という状態は、物理的に発生し得ません。 画面に見えているものが、常に正解です。


【実物公開】サンプルファイルをプレゼント

今回の記事で解説した「完全全自動ガントチャート」を、読者の皆様にプレゼントします。 コードはロックしていません。Alt + F11 を押して、中身を見てください。つたないコードですがご了承ください。。。

[📂 サンプルファイル:ガントチャート.xlsm をダウンロード]


自分で作りたい人へ:全ソースコード公開

セキュリティの都合でファイルをダウンロードできない方や、コードを勉強したい方のために、全コードを掲載します。 以下の「▶」ボタンを押して、コードをコピーし、標準モジュールに貼り付けてください。

ソースコード

ステップ1:標準モジュール(計算の本体)

VBAの画面で「挿入」→「標準モジュール」を選び、以下のコードを貼り付けます。これが自動化の「脳みそ」部分です。

VB.Net

ステップ2:シートモジュール(入力の監視)

左側のツリーから、ガントチャートにしたいシート(例:Sheet1)をダブルクリックして、以下のコードを貼ります。 これが「入力した瞬間(更新ボタンなし)に動く」ためのスイッチです。

VB.Net

ステップ3:ThisWorkbookモジュール(開いた瞬間の更新)

左側のツリーから「ThisWorkbook」をダブルクリックして、以下のコードを貼ります。 これが「開いた瞬間に祝日APIを叩く」ためのスイッチです。

VB.Net

結論:DXは「人間の弱さ」を認めることから始まる

全3回にわたり、「卒Excel」について語ってきました。 最終回で伝えたかったのは、「ツールを入れれば解決するというわけではない」自社のデータについて、自分たちで管理することが大切だということです。

新しいツールを入れることが必ずしも効率を上げるわけではなく、自分たちのデータをどのように表現すれば使いやすくなるのかを考えること。これこそがDXの神髄だと思います。

ぜひExcelを使い倒して自社の入力データと出力データの整理を進めてください。いつか、システムを導入する際に役立つことになるとおもいます。


私は、製造現場の「もったいない」を知るSEとして、その「めんどくさい」に隠された「お宝データ」を発掘し、仕組み化するお手伝いをしています。

もし、「ウチの現場も『押し忘れ』で事故が絶えない…」とお悩みなら、一度KSPにご相談ください。 人間の弱さを前提とした、現場に優しい仕組みづくりをお手伝いいたします。


関連記事

上部へスクロール