「あのマクロ、誰も直せない」——退職した担当者が残した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終焉論を過度に恐れる必要はありません。クラウド前提の環境では、すでに新しい自動化基盤が実用段階に入っています。