📦 GitHubはこちら → Excel業務効率化マクロ集
🔍 GitHubをご覧いただく際は、READMEの「構成」「処理フロー」および個別マクロのサンプルコード部分を中心に見ていただけると、流れが伝わりやすいと思います!
はじめに
このプロジェクトは実務での課題に直面したことをきっかけに、誰が使っても正確に処理できる仕組みを目指して設計しました。
本記事では、日々のExcel業務の中で感じていた「手間がかかる」「ミスが起きやすい」といった課題を解決するために、自作したVBAによる業務効率化マクロ集を紹介します。
こんな方に読んでもらえたら嬉しいです
- 実務の中で「この作業、毎回しんどいな」と思ってる方
- VBAで業務自動化って実際どうやってるの?って気になってる方
- 自分でもVBAを書き始めたいけど、どこから手をつければいいか迷ってる方
- 仕事の中で作ったツールをポートフォリオに活かしたい方
実務で使っていたマクロをポートフォリオ用に整理していますが、
処理の流れや構成に自分なりの工夫を入れているので、
特に「📊 マクロ全体の流れ」「📦 構成(マクロの流れと役割)」を見てもらえると嬉しいです。
また、設計や読みやすさの点で改善できそうな部分があれば、ぜひフィードバックいただきたいです!
役立つ場面
以下のような現場で、特に効果を発揮します:
- 各部署やチームから提出されるフォーマットがバラバラなExcelファイルをまとめたいとき
- 「必須項目の抜け」「重複」「精神的コスト」など
作ろうと思った背景とVBAを選んだ理由
本プロジェクトは、日々のExcel業務における属人化やミス、精神的な負担を減らすことを目的にスタートしました。
特に以下のような課題が積み重なっていました
- 複数部署から提出されるExcelのレイアウトや命名がバラバラ
- チェック項目が毎回異なるため、都度手作業で対応する必要がある
- 空白や不一致などの人為的ミスが頻発し、最終確認も目視に依存
- 毎回の確認作業に時間と神経を消耗し、精神的な負担が大きかった
これらの問題に対し、自動化ツールを導入することを検討しましたが、
業務がすべてExcel上で完結していたことや、社内PCのインストール制限などの制約を踏まえると、追加環境の構築不要なVBAが最も現実的かつ導入しやすい選択肢でした。
工夫したこと・試行錯誤したポイント
本プロジェクトでは、業務にそのまま導入できる実用性を重視して設計・実装を行いました。
特に意識したのは、保守性・可読性・現場適応性の3点です:
-
処理はサブルーチン単位で細かく機能分けし、後からの修正や機能追加がしやすい構成
-
コメントや処理の説明を丁寧に記述し、VBAに不慣れな方でも理解しやすいように配慮
-
「管理ID」などのラベル位置が変わるケースや空白セルに対応するため、表構造の揺れに強いロジックを実装
-
色塗りや入力制限の設定は、ミスを未然に防ぐための実務的なチューニングが必要で、試行錯誤を繰り返した点
-
最終的に各マクロが連携して一つの業務フローとして動作する構成に仕上げるため、処理順の整合性や連携部分に特に注意を払った点
-
試行錯誤を重ねながら、最終的にすべてのマクロを連携させて一つの業務フローとして完成できたときは、実際の現場で動かせた達成感と、「あ、自分でもこういう仕組みが作れるんだ」と思えた喜びがありました。
解決のために作ったこと
こうした課題に対応するため、以下のような「汎用チェック用マクロ」をVBAで作成しました
- ファイルの整形・統合処理を一括自動化
- 指定した列同士を比較し、不一致を赤塗り+リスト出力
- 空白・重複・部署不一致などの人為ミスを検出
- 色付けや入力制限などで誤操作を未然に防止
マクロ全体の構成と処理フロー
- Excelファイルをエクスポート
- フォルダに格納し、ファイル名を統一
- マクロで各ファイルを読み込み、1つに統合
- 項目の並べ替え・不要列削除
- 「要否フラグ」の追加
- 部署情報をもとに色付け
- チェックマクロで〇×判定
- 不一致を抽出し、別シートに出力
構成(マクロの流れと役割)
各マクロの役割や実行タイミングは以下の通りです。
🟢 ProcessSheets
(最初に実行)
- 役割:必要な列を抽出・整形し、統合シートを作成
- 補足:入力制限や色付けの設定もこのマクロで自動処理されます
🟡 checkMacro
(中間チェック)
- 役割:任意の2シートの指定列を比較し、不一致を赤塗り&別シートに出力
- 補足:「一旦ここまででチェックしたい」ときに使います
🔵 compareTasks_decisionFlag
(項目内容の一致確認)
- 役割:統合シートと別シート間の重要項目の一致をチェック
- 補足:意思決定に使うようなフラグ項目などに特化してます
🟡 compareTasksColumns
(中間チェック)
- 役割:任意列を比較し、不一致があれば赤塗り&詳細出力
- 補足:差異の可視化やトラブルの早期発見に便利
🔴 Lastcheckfiles_macrosheet
(最終チェック:権限・連絡先)
- 役割:参照シートと他シート間で、役割・連絡先などの整合性を確認
- 補足:提出前の最終確認・整合性チェックに使います
制作を通して学んだこと・つまずいた点
最初は少ないルーチンで処理を回していましたが、VBAではエラーの原因特定が難しく、
「どこで落ちてるのか分からない地獄」に何度も突入しました。
そこから、処理をサブルーチン単位で細かく整理するように変更。
結果として、保守性・再利用性が大幅に改善され、「あとから直すのが怖くないコード」になっていきました。
業務に即したロジックの組み込みでも、想像以上に苦労しました。
たとえば:
-
色判定や入力制限、セルのグループ化
→ 条件が多く、細かい調整が必要 -
「管理ID」など特定ラベルをヘッダーから探す処理
→ 書式の揺れや空白セルに苦しめられる -
文字列が数字なのか文字なのか判別がつかない問題
→Find
やループ処理での探索がややこしくなりがち
VBA自体はシンプルな言語ですが、実際に感じたのは
“作れること”よりも“現場で使えること”のほうがずっと難しいという点でした。
特に今回のマクロでは、以下のような「Excelあるある」に真正面からぶつかる必要がありました:
- 提出フォーマットがバラバラ(行や列のズレ)
- 書式が微妙に違う(全角・半角、空白、結合セルなど)
- 部署ごとに例外ルールがある(地味にめんどい)
- 「3行目に項目がある」などの固定前提が通じない
そのため今回は、“理想じゃないリアル”に合わせて動く設計が必要不可欠でした。
具体的には以下のような工夫をしています:
- ラベル名を手がかりに、位置を動的に特定する
- 空白セルや結合セルにも対応する柔軟な探索ロジック
- 書式揺れを検出しやすくするよう比較処理を設計
- チェック項目ごとの例外処理をサブルーチン単位で分割
正直、一番時間を使ったのは「フォーマットの揺れ」にどう対応するか。
でも、ここを乗り越えたことで、どんな現場でもある程度対応できる**“再現性と汎用性”**を実現できたと感じています。
最後に
ここまで読んでいただきありがとうございます!
もし「こうすればもっと使いやすくなる」や「ここ読みにくいかも」といったご意見があれば、ぜひコメントで教えてください!
- 「構成・読みやすさ・実用性」の観点でアドバイスもらえると嬉しいです!