工程表をマクロで作る手順と作り方の要点|属人化させない組み方
「工程表 マクロ 作り方」で検索している人の多くは、毎回同じ形の工程表を手で引き直すことに疲れています。作業の一覧を貼り付けたら、日付の列が自動で並び、バーが勝手に描かれてほしい。その願いはVBAで実現できますし、思っているより短いコードで形になります。ただし、マクロで作った工程表には、手作業の工程表には無い固有の詰まり方があります。この記事では、書き始める前に決めておくこと、実際に自動生成する手順、動かなくなる典型的な場面、そして書いた本人以外が触れなくなる状態をどう避けるかまでを順番に扱います。
工程表をマクロで自動化したくなる場面が増えている理由
工程表そのものは新しいものではありません。それでもマクロで自動化したい人が絶えないのは、工程表が「作って終わり」の資料ではなく、毎週作り直される種類の資料だからです。同じ作業をする回数が多いほど、自動化の投資は回収されます。工程表は、その条件をきれいに満たします。
もうひとつの背景は、扱う案件の数が増えたことです。1つの案件を追いかけていた頃は、表を1枚だけ丁寧に手入れすれば済みました。案件が5本、10本と並ぶと、同じ形の表を5枚も10枚も作ることになります。ここで、案件名と作業一覧を差し替えるだけで表を吐き出す仕組みが欲しくなります。
さらに、報告の相手が増えたことも効いています。社内の会議用、発注元への提出用、現場に貼り出す用で、同じ工程を違うレイアウトで出すよう求められる場面があります。元データが1つでレイアウトが3つなら、レイアウトのほうを自動生成するのが筋です。手で3枚作れば、必ずどれかが古くなります。
一方で、自動化に踏み切る前に確かめておくべきことがあります。3か月先に同じ形式を使っているかどうかです。形式そのものが固まっていない段階でマクロを書くと、仕様が変わるたびにコードを書き直すことになります。手作業で3回ほど繰り返して、形が動かなくなってから自動化する順番のほうが、結果として早く終わります。
自動化の目的をはっきりさせておくことも大切です。時間を減らしたいのか、人による書き方のばらつきを消したいのかで、作るものが変わります。前者ならバーを描く処理だけで足ります。後者なら、入力できる値を制限する仕組みまで含めないと目的を達しません。ここを曖昧にしたまま書き始めると、どこまで作れば完成なのかが決まらず、いつまでも手が入り続けるコードになります。
マクロを書く前に決めておく4つのこと
いきなりコードを書くと、途中で構造を変える羽目になります。先に次の4つを紙に書き出してください。
・入力の置き場所。作業一覧はどのシートのどの列に置くのか ・出力の形。目盛りは日単位か週単位か、1行は1作業か1担当か ・実行の合図。ボタンを押したときだけ動くのか、開いたときに動くのか ・作り直しの範囲。毎回まっさらから描き直すのか、差分だけ更新するのか
入力の置き場所は、シートを分けるのが基本です。同じシートの中で入力と出力を混ぜると、描画のときに入力まで消してしまう事故が起きます。入力用のシートには、作業名、担当、開始日、終了日、状態、備考の6列を置き、それ以外は置かないと決めておきます。列の順番も固定します。順番が変わると、コードの中の列番号がすべてずれます。
出力の形は、後から変えると影響範囲が大きい部分です。特に目盛りは、週単位で始めておくのが無難です。日単位は列数が一気に増えるため、半年の工程を引くと列が180本を超えます。週単位なら26列で収まります。列が多いほど描画に時間がかかり、印刷もしづらくなります。
実行の合図は、必ずボタンにしてください。ブックを開いたときに自動で走る形にすると、開くたびに待たされるうえ、内容を見たいだけの人まで書き換えの対象になります。シートに図形を1つ置いてマクロを登録し、押したときだけ動くようにします。押す前と押した後で何が変わるのかが目に見えるので、他の人にも説明しやすくなります。
作り直しの範囲は、まっさらから描き直す方式を勧めます。差分更新は一見効率的ですが、前回の状態を正しく把握していないと、消し残しが積み上がります。工程表の描画は数秒で終わる処理なので、毎回全部消してから引き直すほうが、結果の予測がつきます。予測がつくということは、他の人が触っても壊れにくいということです。
自動生成するマクロが実際にやっていること
工程表を自動生成するマクロは、見た目ほど複雑なことをしていません。分解すると、次の4つの処理の組み合わせです。
1つ目は、日付の見出しを作る処理です。入力シートの開始日の最小値と終了日の最大値を拾い、その範囲を目盛りの単位で刻んで、出力シートの1行目に並べます。ここを固定の日付にせず、データから計算するようにしておくと、案件が変わっても同じマクロが使えます。
2つ目は、行を並べる処理です。入力シートの作業一覧を上から読み、出力シートの左側に作業名と担当を書き込みます。並び順は、開始日の早い順にしておくと工程表として読みやすくなります。担当ごとにまとめたい場合は、担当で並べてから開始日で並べる二段階の並べ替えにします。
3つ目は、バーを塗る処理です。各行について、開始日の列から終了日の列までのセルに背景色を入れます。列の位置は、日付の見出しから逆算するか、開始日と最初の目盛りの差を単位で割って求めます。ここが自動生成の中心であり、手作業で最も時間を食っていた部分でもあります。
4つ目は、今日の位置を示す処理です。今日を含む列だけを縦に塗るか、罫線を1本引きます。この線より左で完了していない行が遅れです。会議で説明する手間が大きく減るので、必ず入れてください。
なお、バーを塗るだけであれば、マクロを使わずに条件付き書式でも同じことができます。条件付き書式は、日付の見出し行と開始日終了日の列を比べる数式を1つ書けば済み、コードの管理も要りません。マクロが必要になるのは、行の追加や並べ替え、複数シートへの書き出し、印刷範囲の設定まで一括でやりたい場合です。バーを塗るだけならマクロは要らない、という判断は最初に一度してください。
実際に組むときの手順
手順は次の通りです。慣れれば最初の版が2時間ほどで動きます。
まず、ブックを.xlsm形式で保存します。マクロを含むブックは通常の.xlsx形式では保存できず、保存しようとするとコードが失われます。ここを最初にやっておかないと、書いたコードが消えて心が折れます。
次に、シートを3枚用意します。入力用、出力用、設定用です。設定用には、目盛りの単位、バーの色、状態の一覧といった、後から変えたくなる値を置きます。これらをコードの中に直接書くと、色を変えたいだけのときにコードを開くことになります。設定用シートに逃がしておけば、コードを読めない人でも調整できます。
続いて、開発タブからVisual Basic Editorを開き、標準モジュールを1つ追加します。処理は1つの巨大な手続きにせず、日付の見出しを作る、行を並べる、バーを塗る、今日の線を引く、の4つに分けます。分けておくと、うまくいかないときにどこが原因か切り分けられます。ひとまとまりで書くと、動かないときに全部を疑うことになります。
処理を書くときの注意点が2つあります。1つは、セルを1つずつ触らないことです。ループの中で毎回セルに書き込むと、行数が増えたときに極端に遅くなります。配列にまとめてから一度に書き込む形にすると、体感が変わります。もう1つは、画面の更新を止めることです。処理の最初で画面更新と自動計算を切り、最後に戻すだけで、実行時間が短くなります。切ったまま戻し忘れると、その後の操作が奇妙な動きになるので、エラーが起きたときも必ず戻る書き方にしてください。
最後に、実行前の確認を入れます。開始日が終了日より後になっている行、日付が空の行、担当が空の行を先に洗い出して、あればメッセージで知らせます。工程表の自動生成で最も多い不具合は、コードの誤りではなく入力の誤りです。入力を疑う仕組みを先に入れておくと、後の問い合わせが減ります。
動き始めたら、実行のたびに前回の出力を残す必要があるかを考えてください。残す場合は、出力シートを複製してから描き直し、シート名に実行日を付けます。ただしこの方式は、半年も回すとシートが20枚を超えてブックが重くなります。過去の状態を確認したい場面が本当にあるのかを先に確かめて、無いなら残さないほうが健全です。工程表は最新版だけが正しい種類の資料であり、履歴を持ちたいという要望の多くは、実際には「いつ誰が変えたか」を知りたいという別の要望です。それはブックの複製では解決しません。
もうひとつ、印刷の設定まで自動化しておくと効果が大きいです。印刷範囲、横1ページに収める設定、繰り返す見出し行の指定は、手でやると毎回同じ操作を繰り返すことになります。描画処理の最後にこの3つを設定する数行を足すだけで、実行してそのまま印刷できる状態になります。提出用の工程表を紙で出す現場では、この数行が最も感謝されます。
入力シートの列を、後で困らない形に決める
自動生成の出来は、コードの巧拙よりも入力シートの設計で決まります。ここが雑だと、どれだけ丁寧に書いたコードも例外処理だらけになります。列は次の形にしておくと、後の作業がほぼ全部楽になります。
作業名は、動詞で終わる形に揃えます。「設計」ではなく「設計を仕上げる」と書くと、終わったかどうかを本人以外も判断できます。工程表に並ぶ行の半分が名詞止めだと、状態の列を見ないと進み具合が分かりません。表を読む速さは、この一手でかなり変わります。
担当は、必ず1人にします。2人の名前をひとつのセルに入れると、並べ替えも絞り込みも効かなくなります。実際に2人で進める作業は、行を2つに分けてください。分けられない作業は、まだ分解が足りない作業です。工程表に載せる粒度としては、3日から10日で終わる大きさが扱いやすい範囲です。
開始日と終了日は、必ず日付の値で入れます。文字列で「9/1」と打つと、見た目は日付でも計算に使えません。入力シートの該当列にあらかじめ日付の表示形式を設定し、入力規則で日付以外を弾いておくと、実行時のエラーが激減します。マクロの不具合として持ち込まれる相談の多くは、実際にはこの型の食い違いです。
状態の列は、選べる値を4つに限定します。未着手、進行中、完了、保留です。自由入力にすると「対応中」「作業中」「着手済」が混ざり、集計もフィルタも効かなくなります。入力規則のプルダウンにしておけば、コード側は文字列を単純に比較するだけで済みます。値の一覧は設定用シートに置き、コードはそこを読む形にしてください。将来「差し戻し」を足したくなったとき、シートに1行足すだけで済みます。
備考は自由入力で構いませんが、工程表には出力しないと決めておきます。備考まで出力すると行の高さが揃わず、バーが波打って見えます。読ませたい情報と、記録として残す情報は置き場所を分けるのが原則です。
マクロが動かない、ブロックされる場面
書いたコードは正しいのに動かない、という相談は珍しくありません。原因のほとんどはコードではなく、安全のための仕組みです。
インターネットからダウンロードしたファイル、メールに添付されて届いたファイル、社外の共有リンクから取得したファイルは、開いてもマクロが実行されない状態になります。画面には、マクロがブロックされたという警告が出ます。これは不具合ではなく、既定の動作です。
マクロは、Microsoft 365 に多くの機能を追加できますが、悪意のあるユーザーが無防備な被害者にマルウェアを配布するために使用される場合がよくあります。 マクロは、Word ドキュメントの読み取りや編集、Excel ブックの使用などの日常的な使用には必要ありません。 出典: support.microsoft.com
この前提を踏まえると、工程表のマクロを配る方法は限られます。メールに添付して配るのは最も相性が悪いやり方です。受け取った全員が、警告を解除する操作を自分でやることになります。解除の手順を説明して回るくらいなら、最初から別の方法を選んだほうが早いという結論になりがちです。
現実的なのは、社内で信頼済みとして扱われる場所にブックを置き、そこから開いてもらう形です。どの場所を信頼済みとするかは、情報システムの担当が決める領域なので、勝手に設定を変えず、必ず相談してください。安全の仕組みを個人の判断で緩めると、その端末だけの問題では済まなくなります。
もうひとつ、よくあるつまずきが、開いた人のExcelにマクロの機能が有効になっていない場合です。組織の方針でマクロ全体が停止されている環境もあります。この場合は、そのブックだけの問題ではないので、自動化の方針そのものを考え直す必要があります。
ブラウザとスマホでは動かないという制約
マクロで工程表を組むとき、最初に知っておくべき制約があります。VBAで書いたマクロは、動く場所が限られています。
Microsoftの開発者向け資料では、VBAマクロが使えるのはWindows版のExcelとMac版のExcel、そしてその他のOffice製品であり、ブラウザで動くExcel、iOS版のExcel、Power Automateでは使えないと整理されています。同じ資料には、設計思想の違いも書かれています。
基本的な違いは、VBA マクロはデスクトップ ソリューション用に開発され、Office スクリプトはセキュリティで保護されたクロスプラットフォームのクラウドベースのソリューション用に設計されていることです。 出典: learn.microsoft.com
工程表の運用で、この制約は思ったより重く効きます。現場にいる人がスマートフォンで工程表を開いても、マクロのボタンは押せません。ブラウザだけで作業している人も同じです。つまり、マクロで自動生成した工程表は、パソコンの前にいる特定の人が更新し、他の人はその結果を見るだけ、という構造になります。
この構造自体が悪いわけではありません。工程表を引く役割が1人に決まっているチームでは、むしろ都合がよい場合もあります。問題になるのは、更新を分担したくなったときです。分担しようとした瞬間に、全員がパソコン版のExcelを持ち、同じ場所からブックを開き、警告を解除している必要が出てきます。
ブラウザやスマートフォンからも触れるようにしたい場合、選択肢は2つあります。ひとつはOfficeスクリプトで書き直すことです。ただしこちらは、使用にあたって法人向けまたは教育機関向けのライセンスが必要だと同じ資料に記載があります。もうひとつは、自動化そのものをやめて、更新の分担ができる道具に工程を移すことです。どちらが向いているかは、更新する人が何人いるかで決まります。
マクロで作った工程表が続かなくなる3つの理由
自動化がうまくいったチームでも、1年ほど経つと止まっていることがあります。理由はだいたい3つに分かれます。
1つ目は、書いた人がいなくなることです。工程表のマクロは、たいてい進行を預かっている人が自分の手間を減らすために書きます。その人が異動すると、コードを読める人が誰もいない状態になります。エラーが出た瞬間に、全員が手作業に戻ります。対策は、コードの中に日本語のコメントを多めに書くことと、設定用シートに逃がせる値はすべて逃がすことです。読めなくても、値だけは変えられる状態にしておきます。
2つ目は、例外の作業が入らなくなることです。マクロは決まった形の入力しか受け付けません。途中で分割された作業、期間が飛び飛びの作業、担当が2人いる作業といった例外が出たとき、入力シートに書けません。書けないものは表に載らず、載らないものは忘れられます。例外が月に3件を超えたら、形式が現実に合っていない合図です。
3つ目は、更新が滞ることです。マクロを実行できる人が1人しかいないため、その人が忙しい週は工程表が古いままになります。古い表は誰も見なくなり、見られない表は更新されなくなります。この悪循環は、道具の性能ではなく、更新できる人数の問題です。
この3つは、いずれも自動化そのものが原因ではありません。自動化によって、もともとあった弱点が見えにくくなるだけです。手作業で工程表を引いていたときも、引ける人は1人だったはずです。マクロを書くと、その1人しか触れない状態が固定されます。
現場では、更新できる人が1人だけの表は2週間ほどで実態からずれ始めると言われています。自動化によって作る時間は短くなりますが、更新できる人の数は増えません。むしろ、コードを理解している人しか触れない分、減ることもあります。ここが、工程表の自動化に固有の落とし穴です。
マクロを続ける場合と、板に移す場合の分かれ目
判断の材料は、次の3つに絞れます。
工程表を更新する人が1人で、その人がパソコンの前にいる時間が長いなら、マクロを続けるのが合理的です。追加の費用が要らず、レイアウトを自由に決められ、印刷や提出用の体裁も細かく作り込めます。発注元への提出物として工程表を出す仕事では、この自由度が効きます。
更新する人を増やしたい、または現場から直接触ってほしいのであれば、マクロの延長線上に答えはありません。カードを動かすだけで状態が変わり、誰が見ても同じものが表示される仕組みに移すほうが、目的に近づきます。カンバンとガントを両方持つ道具であれば、日々の入力はカードで行い、工程表としての見え方は自動で組み立てられます。どこまでできるのかはできることのページに機能ごとにまとめられています。
費用の見通しも判断材料になります。道具を入れるとき、機能ごとにプランが細かく分かれていると、必要な機能がどのプランに入っているのかを調べる時間がかかります。機能で絞らず、区切るのは人数とボードの数だけという決め方であれば、人数だけ数えれば見積もりが出ます。プランの区切り方は料金のページで確認できます。
判断を急ぐ必要はありません。マクロで作った工程表をそのまま残しつつ、日々の進捗だけ別の場所で管理する、という並行運用から始める方法もあります。提出用の工程表は月に1回でよく、日々の進捗は毎日変わる、という現場では、この分け方が現実的です。
移行を考えるときに、先に確かめておくとよいこと
道具を移す話が出たとき、機能の比較表を眺めるより先に確かめるべきことがあります。
いま使っている道具から、データをどう運び出せるかです。マクロで組んだブックの中身は、CSVに書き出せる形になっているはずなので、この点は比較的やさしい部類に入ります。ただし、自動で取り込める形式には限りがあります。自動で取り込めるのはTrelloからのデータだけで、それ以外は手で移すことになる、という前提は先に知っておいたほうがよいです。移行の手順はTrelloからの移行のページに書かれています。
次に、他の道具と比べてどこが違うのかです。カンバン形式のツールから移る場合と、課題管理型のツールから移る場合では、失うものが違います。比較の観点ごとに整理したページが比較の一覧にあるので、いま使っている道具の名前から探すのが早いです。個別では、カンバンの元祖とも言える道具との違いをまとめたTrelloとの比較、国内で広く使われている課題管理型との違いをまとめたBacklogとの比較、多機能なワークスペース型との違いをまとめたNotionとの比較があります。
サービスが終わる可能性も、現実の判断材料です。カンバン方式のタスク管理ツールであるJootoは、公式サイトで2027年7月31日をもって一般提供を終了すること、2027年8月1日以降はデータを順次すべて削除する予定であることを告知しています。いま使っている道具が終わるとき、工程表をどこへ運ぶかを決める必要が出ます。移行先を検討している人向けに違いを整理したJootoとの比較も用意されています。
最後に、社外のデータを預ける以上、安全性の考え方も確かめておくべきです。何をどう守っているかを説明したページが安全性の考え方にあります。導入前に出てくる質問はよくある質問にまとまっているので、社内で説明する材料として先に目を通しておくと話が早く進みます。
自動化の効果を測るための、たった1つの指標
工程表を自動化したあと、効果を測る指標として時間を選ぶ人が多いです。作成にかかっていた時間が何分減ったか、という測り方です。この指標は分かりやすいのですが、実務の判断にはあまり役立ちません。
より役に立つのは、工程表が最後に更新された日から今日までの日数です。この数字が7日を超えているなら、その表は会議の材料として機能していません。作る時間がどれだけ短くなっても、更新されなければ意味がないからです。
自動化は作る時間を短くしますが、更新する動機は作りません。動機を作るのは、更新した内容がその場で他の人の画面に反映されることと、更新しないと自分が困る構造です。マクロで組んだブックは、前者を満たしません。更新した結果は、ファイルを開き直した人にしか見えません。
比較のページを横に並べて読むと、道具ごとの違いは機能の数ではなく、更新する人を増やせるかどうかに集約されていることが分かります。案件ごとにボードを分ける道具、担当ごとにビューを切り替える道具、通知で更新を促す道具と、方向はさまざまですが、狙っているのは同じ場所です。プロジェクト管理ツールを比べるときは、機能表の行数ではなく、自分のチームで実際に手を動かす人が何人になるかを想像してください。
もうひとつ見ておきたいのが、工程表に載っている行のうち、当事者以外が更新した行の割合です。すべての行を進行役が代理で書き換えているなら、その表は進行役の頭の中の写しでしかありません。担当者本人が触った行が3割を超えてくると、表が実態を映し始めます。この割合は道具を変えた直後に上がりやすく、上がらないまま1か月が過ぎるなら、道具ではなく運用の決め方に原因があります。
自動化を否定しているわけではありません。工程表を1人で引き続ける前提が確かなら、マクロは有効な手です。ただ、その前提が崩れる日が来ることは、あらかじめ想定しておいてください。崩れたときに、入力データがCSVで持ち出せる形になっているかどうかで、次の一手の速さが決まります。入力シートを分け、列の順番を固定し、設定を外に出しておく。この記事で挙げた組み方は、そのまま次の道具への引っ越し準備にもなっています。
Q1. 工程表のマクロは、プログラミングの経験がなくても書けますか?
バーを塗るだけであれば、記録したマクロを手直しする範囲でも形になります。ただし日付から列位置を計算する処理はコードを読む必要があります。まずは条件付き書式で足りないかを確かめ、行の追加や複数シートへの書き出しまで自動化したい場合にコードへ進むのが現実的です。
Q2. マクロを含むファイルを配ると、相手の環境で動かないことがあるのはなぜですか?
インターネットやメール経由で届いたファイルは、既定でマクロがブロックされます。これは不具合ではなく安全のための動作です。解除の設定は個人の判断で変えず、社内で信頼済みとして扱われる場所にブックを置いて、そこから開いてもらう形にしてください。
Q3. スマートフォンから工程表のマクロを実行できますか?
できません。Microsoftの資料では、VBAマクロが動くのはWindows版とMac版のExcelであり、iOS版やブラウザ版では使えないと整理されています。現場から直接触ってほしい場合は、マクロではなくブラウザとアプリの両方で動く仕組みに工程を移す必要があります。
Q4. マクロで作った工程表から別のツールへ移すとき、何を準備すればよいですか?
作業名、担当、開始日、終了日、状態が1行1件で並んだ入力シートを用意し、CSVで書き出せる状態にしておいてください。列の順番を固定し、状態の値を数種類に限定しておくと移行が楽になります。自動で取り込める形式には限りがあるため、手作業の範囲も先に見積もっておくと安全です。