0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAの限界と脱却ロードマップ — 製造業エンジニアが実践した段階的移行

0
Last updated at Posted at 2026-04-03

こんな状況、心当たりはないだろうか。

  • 「このVBAマクロ、誰が作ったの?」と聞いても、もう退職した人だった
  • ボタンをダブルクリックしないとマクロが動かない。原因は誰にも分からない
  • Excelファイルが20MBを超えて、開くだけで1分かかる
  • VBAのソースコード管理のために、わざわざテキスト書き出しツール(vbac等)を使っている

私は製造業の生産技術職として5年以上働きながら、まさにこの問題と向き合ってきた。最終的にC#/.NETへの段階的な移行を選び、結果として業務の安定性と開発効率が大きく変わった。

この記事では、VBAの限界を製造業の現場目線で整理し、C#への移行を「段階的に、小さく始める」ロードマップとして紹介する。

この記事で分かること

  • VBAの5つの構造的な限界(なぜ「頑張っても解決できない」のか)
  • 移行先の選択肢(Python / Power Platform / C#)の比較と判断基準
  • 段階的な移行ロードマップ(5ステップ)
  • 移行後に実感した具体的な改善ポイント

対象読者

  • 製造業でExcel VBAの業務ツールを運用している方
  • VBAの属人化や保守の問題に悩んでいるDX担当者・情シスの方
  • 「C#に移行すべきか」の判断材料を探しているエンジニア

VBAの5つの構造的な限界

「VBAが悪い」と言いたいわけではない。VBAは「今すぐ動くものをサッと作れる」という点で優秀なツールだ。問題は、それが組織の業務基盤として長期運用されたときに起きる。

1. ソースコードの変更管理ができない

VBAのコードはExcelファイルの中に埋め込まれている。Gitのようなバージョン管理システムで差分を追うには、vbacのような外部ツールでソースをテキストに書き出す必要がある。

私の現場でもvbacを使って管理していたが、正直に言うと運用は面倒だった。「書き出し忘れ」が起きると差分が追えなくなり、結局「どのバージョンが最新か分からない」という状態が発生する。

C#なら.csファイルがそのままテキストなので、GitHubで普通に管理できる。プルリクエストでレビューもできるし、変更履歴も完全に追える。

2. テストの自動化が難しい

VBAの単体テストフレームワークは存在するが、有料だったり導入のハードルが高い。結果として「手動で動かして目視確認」がテストの主流になる。

製造業の品質管理データを扱うマクロで「手動テスト」は正直怖い。数値の丸め処理や集計ロジックにバグがあっても、気づくのは問題が起きた後になりがちだ。

C#ならxUnitやNUnitで単体テストが書ける。さらにGitHub Copilotを使えば、テストコードの生成もかなり楽になった。

3. UIの挙動が不安定

VBAで作ったフォーム(UserForm)やシート上のボタンは、動作が安定しないことがある。私が経験した例では、ボタンをダブルクリックしないと反応しないという現象が発生し、原因の特定に丸1日かかった。

結局、Excelのバージョンやセキュリティ設定の組み合わせが原因だったが、このような「環境依存の不具合」はVBAの構造的な弱点だ。

C#のWinFormsやWPFならUIの動作は安定している。ボタンのクリックイベントが発火しない、なんてことはまず起きない。

4. 他システムとの連携が困難

製造業のDXが進むと、Excelの中だけで完結する業務は減っていく。データベース、計測器、基幹システム、クラウドサービスとの連携が必要になる。

VBAでもADO接続やHTTPリクエストは可能だが、書き方が古く、エラーハンドリングが複雑になる。非同期処理(async/await)も使えないので、通信中にExcelが固まることもある。

C#なら、NuGetでライブラリを入れるだけでほぼ何とでも繋がる。REST API、データベース(SQLite/SQL Server)、計測器(NI-VISA)、すべて対応できる。

5. 属人化からの脱却が構造的に難しい

上の4つの問題を総合すると、「VBAで作った業務ツールは、作った人にしか保守できない」という状態に陥りやすい。

  • ソース管理がないから、変更の意図が追えない
  • テストがないから、修正しても壊れていないか確認できない
  • UIが不安定だから、「動かない」の原因がコードなのか環境なのか分からない
  • ドキュメントがコードから自動生成できないから、仕様書が陳腐化する

これは個人の能力の問題ではなく、VBAのエコシステムが持つ構造的な弱点だ。

移行先の選択肢を比較する

VBAからの移行先は、大きく3つある。それぞれの特徴を比較しよう。

観点 Python Power Platform C# (.NET)
学習コスト 低め 低い やや高め
Excel操作 openpyxl等で可能 限定的 ClosedXML/EPPlus で高機能
デスクトップUI 弱い(Tkinter等) Power Apps(Web系) WinForms/WPF で強力
計測器・ハード連携 可能だが情報少ない 不可 NI-VISA公式対応
ソース管理 ✅ Git対応 △(ソリューションファイル) ✅ Git完全対応
テスト環境 ✅ pytest等 ✅ xUnit/NUnit
AI支援(Copilot等) ✅ 対応 △ 限定的 ✅ GitHub Copilot対応
社内展開のしやすさ インストール必要 Microsoft 365契約内 exe配布で簡単
長期保守性 ◎(型安全、IDE支援)

私がC#を選んだ理由

製造業の現場では「デスクトップアプリとして動くこと」「計測器と通信できること」「作ったツールをexeで配布できること」が重要だった。この3点を満たすのはC#だけだった。

Pythonは汎用性が高いが、デスクトップUIが弱い。Power Platformは手軽だが、ハードウェア連携やオフライン動作に制約がある。

ただし、これは「製造業の業務アプリ」という文脈での判断だ。データ分析がメインならPython、ワークフロー自動化がメインならPower Automateのほうが合うケースもある。

C#への段階的移行ロードマップ

「全部いっぺんに移行する」のは現実的ではない。業務を止めずに、小さく始める5ステップを紹介する。

Step 1: 棚卸し — 今あるVBAを全部リストアップする

まず、社内で使われているVBAマクロを棚卸しする。以下の情報を整理しよう。

項目 内容
ファイル名 例: 品質検査集計_v3.xlsm
作成者 分かれば記録
使用頻度 毎日 / 毎週 / 月1回 / ほぼ使わない
業務上の重要度 高 / 中 / 低
保守リスク 作成者が在籍しているか、ドキュメントがあるか
移行の優先度 上記を踏まえて判断

ポイント: 「使用頻度が高い × 保守リスクが高い」ものから移行候補にする。全部移行する必要はない。

Step 2: 最小のC#アプリを1つ作る

いきなり大きなシステムを作ろうとしない。まずは一番シンプルなVBAマクロをC#で書き直すところから始める。

おすすめの最初のターゲットは「Excel帳票の自動生成」。理由は、VBA版と出力結果を比較しやすいからだ。

// ClosedXMLでExcelファイルを生成する最小例
using ClosedXML.Excel;

using var workbook = new XLWorkbook();
var sheet = workbook.AddWorksheet("検査結果");

sheet.Cell("A1").Value = "検査日";
sheet.Cell("B1").Value = "製品名";
sheet.Cell("C1").Value = "結果";

sheet.Cell("A2").Value = DateTime.Today;
sheet.Cell("B2").Value = "製品A";
sheet.Cell("C2").Value = "合格";

workbook.SaveAs("検査結果.xlsx");

このコードは10行程度だが、VBAとの違いを体感できる。Excelを起動する必要がなく、Gitで管理でき、テストも書ける。

Step 3: 開発環境を整える

C#での開発を続けるために、最低限の環境を整えよう。

  • Visual Studio Community(無料)をインストール
  • Git でソース管理を開始(GitHubのプライベートリポジトリでOK)
  • GitHub Copilot を導入すると、コード生成やテスト作成がかなり効率化される

ここまで整えば、VBAでの開発とは別次元の体験になるはずだ。IntelliSenseによる補完、ブレークポイントを使ったデバッグ、リファクタリング機能。どれもVBAでは得られなかったものだ。

Step 4: 段階的に移行する

Step 1で棚卸しした優先度の高いものから、1つずつC#に移行していく。

移行のペース: 月に1つのマクロを移行する程度で十分。無理に急がない。

コツ: 移行期間中はVBA版とC#版を並行稼働させる。C#版が安定したことを確認してから、VBA版を廃止する。

Step 5: チームへの展開

C#で作ったツールは.exeファイルとして配布できる。Excelのマクロ設定を気にする必要もない。

チーム内の他のメンバーにも使ってもらい、フィードバックをもらおう。「前より使いやすい」と言ってもらえたら、移行は成功だ。

移行して実際に良くなった5つのこと

私がVBAからC#に移行して実感した変化を、具体的に書いておく。

1. ソース管理が「普通に」できるようになった

vbacでテキストに書き出す手間がなくなった。.csファイルをGitで管理するだけ。変更の差分がプルリクエストで見られるので、チームでのレビューもできるようになった。

2. AIがコードを書いてくれるようになった

GitHub Copilotの恩恵が大きい。C#はCopilotとの相性がよく、テストコードの生成、リファクタリングの提案、ドキュメントの自動生成など、開発速度が目に見えて上がった。

VBAでもCopilotは使えるが、C#ほどの精度は出ない。言語のエコシステムが充実しているほど、AIの支援も的確になる。

3. UI構成の自由度が上がった

WinFormsやWPFでは、UserFormでは実現できなかった柔軟なレイアウトが組める。DataGridViewでの一覧表示、タブ切り替え、ツリービューなど、業務アプリに必要なUIパーツが揃っている。

4. NuGetでライブラリが簡単に追加できる

Excel操作ならClosedXML、PDF生成ならQuestPDF、データベースならDapper。必要な機能をInstall-Package1つで追加できる。VBAでは「参照設定」で苦労していたのが嘘のようだ。

5. テストコードが書けるようになった

xUnitで単体テストを書き、CIで自動実行できる。「修正したら別の箇所が壊れた」という問題を事前にキャッチできるようになった。品質管理のデータを扱うツールで、これは本当に安心感がある。

よくある質問

Q. C#の学習コストはどれくらい?

VBAの経験があれば、C#の基本文法は1〜2週間で理解できる。変数、条件分岐、ループ、関数の概念はVBAと共通しているため、ゼロからのスタートではない。本格的な業務アプリを書けるようになるまでは2〜3ヶ月を見ておくといい。

Q. 既存のVBAマクロを全部移行しないとダメ?

全部移行する必要はない。使用頻度が低く、保守リスクも低いマクロはそのまま残してよい。「壊れたら困るもの」「属人化しているもの」から優先的に移行するのが現実的だ。

Q. 上司に移行を提案するにはどう説明すればいい?

「VBAのサポートがMicrosoftから段階的に縮小されている」「作成者が退職した場合の業務停止リスクがある」「C#なら外部ベンダーへの委託もしやすい」の3点が、経営層に伝わりやすい。コスト面では、Visual Studio Communityは無料であり、既存のPCで開発できることを伝えよう。

Q. Power Automateではダメなの?

ワークフローの自動化(メール通知、ファイル移動、承認フロー等)にはPower Automateが向いている。ただし、デスクトップUIを持つ業務アプリや、計測器との通信が必要な場面には対応できない。用途によって使い分けるのがベストだ。

Q. 小さな会社でも始められる?

むしろ小さな会社ほど始めやすい。大企業のような社内承認プロセスが少なく、1人のエンジニアの判断で技術選定を変えられることが多い。まずは自分の担当業務から小さく始めてみよう。


まとめ

VBAの限界は「個人の頑張り」では解消できない構造的な問題だ。ソース管理、テスト、UI安定性、外部連携、属人化——これらはVBAのエコシステムそのものに起因する。

移行先としてC#を選んだのは、製造業の業務アプリに求められる要件(デスクトップUI、ハード連携、exe配布)を満たし、かつAI(GitHub Copilot)との相性がよかったからだ。

大事なのは「一気に全部移行する」ではなく「小さく始めて、段階的に広げる」こと。まずは1つのマクロをC#で書き直すところから始めてみてほしい。


もっと詳しく知りたい方へ

この記事で紹介した「VBAからC#への段階的な移行」について、自社の業務に当てはめて具体的に検討したい方は、お気軽にご相談ください。

  • 現状のExcel/VBA業務の課題をヒアリング
  • 移行の方向性と優先順位をフィードバック
  • 所要時間: 30分程度(オンライン)

お問い合わせはこちら(ポートフォリオサイト)

筆者について

製造業で5年以上の生産技術経験を持つC#エンジニア。品質管理・計測器制御・業務自動化の現場経験をもとに、中小製造業の業務改善を支援しています。

JodyCraft ポートフォリオ


📝 この記事は Zenn で最初に公開されました。
最新版はZennをご覧ください。


📝 この記事は Zenn で最初に公開されました。最新版はZennをご覧ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?