タケモ塾

エクセルだけで作る!工程表(ガントチャート)の作り方③:こぼれ話(マクロ不要論)

エクセルだけで作る!工程表(ガントチャート)の作り方③

「エクセルだけで作る!工程表(ガントチャート)の作り方」を2回に分けて配信しております。
エクセルだけで作る!工程表(ガントチャート)の作り方①
エクセルだけで作る!工程表(ガントチャート)の作り方②

今回の記事は「エクセルのみ!」を前提として話をしておりますが、中には「これをマクロでやったら、もっと簡単なのでは?」と感じている人もいるかと思います。
本記事はこぼれ話として「マクロを使わなかった理由」を紹介いたします。

前回の記事のおさらい

前回の記事では、以下仕様を持つ工程表(ガントチャート)の作成手順を全2回に分けて紹介しました。
1回目はテンプレートの作成手順、2回目は背景色設定(条件付き書式)について紹介しています。

【機能】
・開始日、終了日を入れるとカレンダー部分の背景色が「水色」に代わります。
・進捗度に「100%」を入れると背景色が「グレー」に代わります。
・土日、祝日(サンプルでは4/5を仮の祝日として設定)の背景色が「ピンク」に代わります。

工程表(ガントチャート)の作り方

マクロを使わなかった理由は?

セルネッツは「Excel&Access専門のITプロフェッショナル集団」を銘打っております。「マクロ専門集団」ではない、と言う点にご留意いただけると幸いです。
「Excel&Access専門」であるため、まずはExcelの機能を最大限に生かすことを先に考えます。

それだけですと、単なる「Excelマニア」になってしまいますので、さらに詳しい理由を紹介いたします。

【マクロを使わない理由:4選】
①チェンジイベントは速度が遅い
②ちょっとした変更でコスト発生!!
③ユーザーを含めた理解度の高さ!!
④品質重視!!(Excelの品質に頼る!!)

【マクロを使わない理由】①チェンジイベントは速度が遅い

今回の要件の場合、「開始日」または「終了日」、「進捗度」のいずれかが入力されたタイミングでプログラムがそれを検知して背景色を設定する、と言うことになります。
これをマクロで実装する場合、Worksheetオブジェクトの「Changeイベント」を利用することになります。

実際にサンプルとなるコードを提示します。

Private Sub Worksheet_Change(ByVal Target As Range)

  ‘ ①列の判定(処理中断)
  If (Target.Column < 3) Or (5 < Target.Column) Then
    Exit Sub
  End If

  ‘②行の判定(処理中断)
  If Target.Row < 4 Then
    Exit Sub
  End If
  
  ‘ ③対象箇所の場合、練習としてメッセージを表示
  MsgBox “イベント対象箇所!!”

End Sub

この時点で「何を言っているかわからない」状態になりますね。

まず、「Changeイベント」はシート内で発生した「値の変更」をすべて拾い上げます
そのため、以下処理を行い「自分が処理を行いたい対象における変更」を判断しなくてはいけません。

No. 処理概要 処理内容
列の判定(処理中断) 対象となる列「開始日(3列目)」~「進捗度(5列目)」以外で値が変更された場合、関係ないため処理を中断します。
行の判定(処理中断) 見出し行(1~2行目)における変更は関係しないため、処理を中断します。
その後の処理 対象箇所である場合、背景色の変更を行います。
今回は割愛し、いったんメッセージを表示するようにしています。

値が変更されるたびに①~③の処理が行われます。

対象列以外であっても、連続して値が書き換えられたら都度、処理が行われます
別ファイルから値を貼り付けられた場合も「Changeイベント」が動作し、①~③の処理が実行されます

このように、裏でくるくると処理が動くため、人の速度にPCが耐えきれなくなる場合があります。
データ量が増えた際にはExcelが固まってしまうこともあるかもしれません。

そういった理由より「Changeイベント」はリスクが高いイベントと言えます。
そのため、今回は利用を控えることにいたしました。

【マクロを使わない理由】②ちょっとした変更でコスト発生!!

先程プログラムを提示した通り、プログラムは専門家でないと編集することが難しく、ちょっとした修正もプロにお任せする必要があります。
工程表に限らず、どのような帳票であっても、運用を続ける中で「ちょっとした条件の変更」や「背景色の変更」と言った要望が出てきます。

プロに頼むということは「都度、費用が発生する」と言うことです。
「基本料など込みにして、少なくとも5万円~」と言った形で対応することになった場合、ちょっとした変更を躊躇し、業務や利用者の理解で無理矢理にカバーしてくこととなります

私共は皆さんの業務をサポートすることを生業としておりますので、この状況は由々しくありません。
そのため、セルネッツでは以下をモットーに開発を行っております。
社内開発でも、担当者異動より太刀打ちできなくなる場合がありますので、参考にしていただければと思います。

【(セルネッツ流)ツール開発のモットー】
・エクセルで出来ることはエクセルに任せる!
・ユーザー(マクロがわからな人)も編集できる仕組みを作る!!

【マクロを使わない理由】③ユーザーを含めた理解度の高さ!!

工程表を作成する際「土日は自動で色を着ける。他の休みはユーザーがカバーすること」とされがちです。

しかし、システムが休みを判断してくれないということは、手作業でカバーしなくてはいけない部分が発生し、結果として使いにくいツールになります。

その点をカバーするために、今回は「曜日行」(2行目)を用意し、その中で「土」「日」「祝」より、休日を編集できる状態にいたしました。

工程表(ガントチャート)の作り方

この点は「設計」レベルの話ですので、マクロを使った場合でも同じ仕組み(2行目で休日を判定)を使うことは可能です。
しかし「ツールを作った後」の話は異なります。

Excelの「条件付き書式」は以下のように、ワークシート内に設定された条件を見ることができます。
そのため、「条件付き書式を使った」と言う事さえ覚えておけば、条件などを後から簡単に確認することができるのです。

これをマクロで作成した場合「プログラムを読める人」しか条件を確認することができません

「ツールを作った後」の状態を考慮すると、Excelの機能を使用した方が、編集できる人の幅が広がります。

工程表(ガントチャート)の作り方

【マクロを使わない理由】④品質重視!!(Excelの品質に頼る!!)

最後に「品質」について紹介いたします。

マクロは人が独自に作成しているため「不具合」の可能性が含まれます。どれだけテストしても「100%大丈夫」と言い切ることは難しいです。

エクセルの場合、何かが起こったとしても「Microsoft」が品質を保証しています。

「特定の条件より色を着ける」と言う使用に対し、「個人」と「Microsoft」。どちらの品質が「高い」と言えるでしょうか。また、どちらの信用が「高い」でしょうか。

言わずもがな「Microsoft」です。「Microsoft」も不具合ゼロとは言いませんが、「個人」よりも「企業」が保証した品質内の機能を活用した方が「高い品質のツール」と言えます。そのため、極力エクセルが持つ機能を活用した方が、品質が良いというわけです。

マクロを利用した方が良い事例とは?

ここまでで「マクロを使わない」を紹介してきましたが、「マクロは悪!」と言いたいわけではありません。
「マクロを使うべき要件と、マクロを使わない要件」があるということです。

ここでは具体的な判断条件の一例を紹介します。

事例 マクロ 理由
アンケートなど特定の様式のファイルを一覧化することになった。(月100ファイル) ・手作業で行う作業時間を考慮すると、自動化は必須です。
・ただし「フォーマットの形が同じ」であることは必須条件となります。(行/列が異なると、正しく読み込むことができません。)
Webページのアナリティクスデータを読込、特定の条件より分析した結果をシートに出力したい。 ・大量データの読み込みはマクロで対応可能です。
・取込んだデータを二次加工したい、というお声は多くいただきます。毎週行うような作業である場合、自動化した方が良いと思いますので、マクロ化を推奨します。
一覧の値を編集し、他シートの状態を変更したい。(※並び替えや絞り込みなど) ・編集と同時に「処理」をすることはお勧めしません。
・画面上に「ボタン」を配置し、特定のタイミングでのみ動作する、と言う事であれば対応可能です。
一覧の値を設定した際、一覧内の別の項目のリストの情報を切り替えたい。(1組を選択したら1組の生徒のみリストに表示される) ・上記同様、一覧内で編集と同時に「処理」を行うことはお勧めしません。
・「一覧上のリスト」を変更することは速度などの問題が生じます。UserFormを用いた入力であれば対応可能です。

まとめ

今回は「マクロを使わなかった理由」を紹介しました。自分でプログラムを作成することは楽しいし、プログラムが理解できればExcelを超えた加工も行うことが可能です。しかし、それに伴うリスクを理解する必要があります。
様々なリスク、および「ユーザーライクな作り」を検討し、行きついた結果が「エクセル機能フル活用」です。

今回の事例を参考に「エクセル機能でどこまでできるかな?」に挑戦いただけたらと存じます。