「あのマクロ、誰も直せない」——退職した担当者が残したVBAマクロは、今も多くの企業で報告や集計を支えています。一方でMicrosoftはクラウド型の自動化へ投資を集中させており、VBAは保守モードに入ったと見なすのが実情です。

この記事では、VBAが実務から後退しつつある理由と、Office Scripts・Power Automate・Python in Excelといった代替手段の使い分けを整理します。

この記事でわかること

  • VBAが「終焉期」と言われる背景(セキュリティ・開発環境・クラウド非対応)
  • Office Scriptsの特徴と向いている作業
  • Power AutomateでExcelを他アプリとつなぐ方法
  • Python in Excelが担うデータ分析の領域
  • 既存マクロを残しつつ新規開発を移行する考え方

VBAは消えないが、新規開発の主役ではなくなった

MicrosoftはVBAの廃止を公式に発表していません。オフラインで動くデスクトップ向け自動化や、他アプリとの深い連携には、依然としてVBAが有効な場面があります(Microsoft Q&A)。

ただし新機能の追加はほぼ止まっており、Visual Basic Editor(VBE)のUIも長年更新されていません。Alt+F11で開くエディタは、ダークモード非対応・Git管理が難しいといった制約が残ります。Microsoftは新しい自動化の投資先として、クラウドで動くOffice ScriptsやPython in Excelを前面に出しています。

セキュリティがVBAの足かせになっている

VBAの強みは、Excel内部だけでなくローカルファイルシステムやOutlookなど他アプリまで操作できる点です。逆にこの自由度が、マルウェア配布の入口になりやすくなっています。

Microsoft 365 for Windowsでは、インターネットやメール添付から取得したファイルに付くMark of the Web(MOTW)属性を持つマクロ付きファイルの実行を、既定でブロックします。2023年1月以降、バージョン2206以降のMicrosoft 365でこの設定が有効化されました(NCSCのガイダンス)。従来の「マクロを有効にする」ボタンではなく、赤いセキュリティ警告が表示され、一般ユーザーが自力で解除するのは困難です。

IT部門はマクロ共有を制限し、クラウドで安全に動く代替手段へ誘導する流れが加速しています。

Power Queryがマクロ記録の役割を奪った

データの整形や結合を毎日繰り返す作業では、VBAのマクロ記録よりPower Queryの方が適しています。Power Queryは操作の記録ではなく、データ変換のロジックそのものを「適用されたステップ」として保存します。手順が見える化されるため、後任が内容を把握しやすく、同じ処理を別ブックにも再利用できます。

クリック操作の自動再生が目的ならVBA、データパイプラインの構築が目的ならPower Query——この切り分けが定着しつつあります。

Office Scripts:Webでも動くTypeScript自動化

https://learn.microsoft.com/en-us/office/dev/scripts/overview/excel

Office Scriptsは、Excelの「自動化」タブから使えるTypeScriptベースのスクリプト機能です。アクション記録で手順を録画し、クリーンなTypeScriptコードに変換できます。VBAのマクロ記録が生成する分かりにくいコードと比べ、保守性が高いと評価されています。

主な特徴は次のとおりです。

  • Excel for the web、Mac、Windowsのボタンにスクリプトを割り当て可能
  • サーバー側のサンドボックスで実行され、ローカルシステムへの直接アクセスは制限される
  • 組織内の同僚とスクリプトを共有可能

一方で、VBAと同等の低レベルAPIアクセスは意図的に提供されていません。OfficeJSはセキュリティのためサンドボックス内で動作し、COMやWin32 APIの呼び出し(FFI)はサポート予定がないとMicrosoft側が明言しています(NoLongerSetの解説)。完全な置き換えではなく、クラウド前提の新規自動化向けツールと捉えるのが正確です。

Power Automate連携にはMicrosoft 365のビジネスライセンスが必要です。1ユーザーあたり1日1,600回までスクリプト実行でき、1アクションのタイムアウトは120秒です(Microsoft Learn)。

Power Automate:Excelを365全体につなぐ

https://learn.microsoft.com/en-us/office/dev/scripts/develop/power-automate-integration

VBAはブック内のデータ移動には強い一方、Outlook・Teams・SharePointとの連携には参照ライブラリの設定が必要で、構築コストが高くなりがちです。

Power Automateは、メール受信やSharePointリストへの行追加をトリガーに、Excel Onlineコネクタの「スクリプトの実行」アクションでOffice Scriptsを呼び出せます。ブックを閉じた状態でもサーバー上でフローが動き続けるため、「メールが届いたらシートに追記する」といった複数VBAを組み合わせた処理を、ドラッグ&ドロップのフロー1本にまとめられます。

スクリプトのmain関数にパラメータと戻り値を定義すれば、フロー内の他アクションへデータを受け渡せます。スクリプト内のスケジュール機能は一時停止中のため、定期実行はPower Automate経由が推奨されています。

Python in Excel:重いデータ分析を担う

https://support.microsoft.com/en-US/Excel/python/introduction-to-python-in-excel

セルに=PYと入力すると、PythonコードをMicrosoftクラウド上で実行し、結果をシートに返せます。Anaconda提供のpandas、NumPy、matplotlib、seaborn、statsmodelsが標準で利用可能です。xl()関数でExcelのテーブルや範囲をpandasのDataFrameとして読み込み、統計処理や可視化を行えます。

Python in Excelの強みは次の領域に集中しています。

  • 大規模データの集計・分析(VBAなら数千行のコードが必要だった処理を短く記述できる)
  • クラウドコンテナでの隔離実行によるセキュリティ
  • データサイエンス業界標準の言語で分析できる点

制約も明確です。ワークブックやPower Query経由のデータのみ読み込み可能で、pandas.read_csvなど外部ファイル直接読み込みはブロックされます。ワークシートの書式設定やファイル移動といったUI操作はVBAの領域のままです(Microsoft Support)。

実務での使い分け

やりたいこと 向いている手段
オフラインで動く既存マクロの維持 VBA(現状維持)
データの整形・結合の定型化 Power Query
Web版Excelで動くボタン自動化 Office Scripts
メール・Teams連携のワークフロー Power Automate
統計分析・可視化 Python in Excel

新規プロジェクトでは、まずクラウドで完結するか・オフライン必須かを確認するのが出発点です。オフラインやエアギャップ環境ではVBAが唯一の選択肢になるケースもあります。

移行は段階的に進める

既存のVBAマクロが明日なくなるわけではありません。世界中に「Daveのマクロ」と呼ばれるレガシー資産が残っており、Microsoftが一括廃止する現実性は低いです。

実務的な進め方は、既存マクロは動かし続けつつ、新規開発だけOffice ScriptsやPython in Excelへ振り向ける段階移行です。データ整形はPower Queryへ、外部連携はPower Automateへ——用途ごとに最適なツールを選べば、VBA終焉論を過度に恐れる必要はありません。クラウド前提の環境では、すでに新しい自動化基盤が実用段階に入っています。