Excelの業務改善で必ず出てくる分岐が、「関数で組むか、マクロ(VBA)で組むか」です。
技術記事だと機能比較で語られることが多いのですが、中小企業の現場では判断軸が違います。大事なのは何ができるかではなく、作った人がいなくなっても、そのファイルが動き続けるかです。
判断軸は「誰が直せるか」
道具を、直せる人の範囲で並べるとこうなります。
| 道具 | 直せる人 | 壊れたときの影響 |
|---|---|---|
| 数式・関数 | Excelを使える人なら大体 | セル単位で済むことが多い |
| テーブル+Power Query | 教われば社内で直せる | 更新が止まる。原因は追いやすい |
| VBA(マクロ) | 書いた人か、書ける人 | 止まると誰も直せないことがある |
VBAが悪いという話ではありません。私自身、VBAで業務を組むことは多いです。ただしVBAで書いた部分は、その会社にとって「触れない箱」になるという前提を持っておく必要があります。
線の引き方
私が実際に使っている目安です。
関数で済ませる部分
- 1枚のシートの中で完結する計算
- 表引き(
XLOOKUP/VLOOKUP) - 条件分岐、集計(
SUMIFS/COUNTIFS) - 「このセルの値を変えたら結果が変わる」形で説明できること
ここは徹底的に関数でやります。社員の方が中身を追えるからです。あとから「この数字どこから来てるの?」と聞かれたときに、セルをクリックすれば答えが見えるのは大きな価値です。
Power Queryにする部分
- 毎月同じ形のCSVを取り込む
- 複数のファイルを縦につなげる
- 列の分割・型変換・不要行の削除
「決まった形のデータを、決まった形に整える」作業はここが一番向いています。手順が画面に残るので、あとから見て何をしているか分かる。VBAで同じことを書くより、引き継ぎがはるかに楽です。
Power Queryは「難しそう」と敬遠されがちですが、実際に社員の方に触ってもらうと、ステップが縦に並んでいる分だけVBAより理解されます。
VBAにする部分
- 複数のブック・アプリをまたぐ操作
- メール送信、PDF出力、印刷
- 分岐が多くて関数では読めなくなる処理
- ボタン一つで一連の流れを実行したいとき
ここは素直にVBAで書きます。ただし条件を付けます。
VBAで書くときの3つのルール
1. 設定値をコードに直接書かない
フォルダのパス、担当者のメールアドレス、単価、しきい値。こうした「あとで変わるもの」は必ず設定シートに置き、コードはそこを読むだけにします。
これをやるかどうかで、その後の保守費用が変わります。宛先を1つ変えるのにコードを開かなければならない仕組みは、変更のたびに外部(私たち)に依頼が必要になる。それは会社にとって不健全です。
2. どこで止まったか分かるようにする
処理の途中で止まったとき、「エラーが出ました」だけでは誰も対応できません。
- どの工程で止まったか
- どのファイル・どの行を処理していたか
この2つをログとして残すだけで、電話一本で状況が分かるようになります。
3. 何をしているかをコードの外に書く
コード内のコメントではなく、シート上に処理の流れを1枚書いておく。「①CSV読込 → ②突合 → ③集計 → ④PDF出力」程度で十分です。中を読めない人でも、どこまで進んで止まったかが分かります。
引き継ぎ範囲は、作る前に決める
これが一番言いたいことです。
「顧客が自分で変更できる範囲」は、設計段階で決めないと後から変えられません。全体をVBAで組んでしまったあとに「ここは触れるようにしましょう」とは言えないからです。
だから着手前に、こう分けます。
- 御社が自分で変える部分 … 設定シート、単価表、宛先リスト、テンプレート
- 私たちが変える部分 … 処理のロジック、外部との連携
この線を引いてから作り始める。線が引かれていれば、日々の細かい変更で毎回外部に依頼する必要がなくなります。保守の範囲も明確になり、「どこまでが契約内か」で揉めることもなくなります。
まとめ
- 判断軸は機能ではなく「誰が直せるか」
- 説明できるものは関数、決まった整形はPower Query、またぐ処理はVBA
- VBAを使うなら、設定値を必ず外に出す
- 触れる範囲・触れない範囲は、作り始める前に決める
自動化は、速く動くものを作ることではありません。来年も再来年も動き続けるものを作ることです。
既にあるExcelファイルを見て「これは関数のままでいい」「ここはPower Queryにしたほうがいい」と整理するところからでもお受けしています。
この記事について
SUPRAXは、林業・製造・運送の現場経験をもとに、中小企業の業務改善・AI活用・GISの支援を行っています。 記事の内容について「うちの場合はどうか」を聞きたい方は、無料相談をご利用ください。
あわせて読みたい
TEXT関数と日付の処理|「2026/9/1」を「9月」にまとめる
「月ごとの売上を出してほしい」と言われて、明細表を開く。日付は1日単位で入っているので、そのままでは月でまとめられません。 手で「9月」と打っていくと、…
SUBTOTAL関数の使い方|フィルタで絞った分だけを合計する
フィルタでA社だけに絞ったのに、一番下の合計が全社の金額のまま動かない。 明細表を使っていれば、必ず一度は出会います。原因は操作ミスではありません。SU…
AVERAGEIFS関数の使い方|条件に合う行だけの平均
「A社の平均単価はいくらか」「9月の1件あたりの平均金額は」。 合計や件数は出せても、平均になると急に自信がなくなるという声をよく聞きます。理由は関数の…