はじめに
Microsoft 365の普及により、Excelの自動化もデスクトップ版VBAからWeb版ExcelのOffice Scriptsへ移行するケースが増えてきました。
しかし「VBAは書けるけどOffice Scriptsは分からない」「既存マクロを移植したい」でも「JavaScriptやTypeScriptは苦手」という方も多いのではないでしょうか。
そこで今回は、生成AI(ChatGPT)を利用して既存のVBAマクロをOffice Scriptsへ変換できるのか実際に検証してみたいと思います。
今回の検証用VBA
まずは簡単なVBAを用意しました。
Sub Sample()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
ws.Range("A1").Value = "Hello VBA"
End Sub処理内容は単純に「Sheet1を取得」して「A1セルへ文字を入力」するだけのものです。
AIへの指示
そして、ChatGPTへ次のように依頼しました。
次のVBAをOffice Scriptsへ変換してください。
Sub Sample()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
ws.Range("A1").Value = "Hello VBA"
End Sub
処理内容は、「Sheet1を取得」→「A1セルへ文字を入力」という単純なものです。
AIが生成したOffice Scripts
そして、生成されたコードがこちらです。
function main(workbook: ExcelScript.Workbook) {
let ws = workbook.getWorksheet("Sheet1");
ws.getRange("A1").setValue("Hello VBA");
}“このVBAは非常にシンプルなので、Office Scriptsへほぼそのまま置き換えられます。“
とコメントが付いていました。
実際に実行してみる
Web版Excelで「自動化」→「新しいスクリプト」を選択します。
既存コードを削除して、生成AIが作成したコードを貼り付けます。
実行すると、A1セルに「Hello VBA」が入力されました。
変換結果は正常に書換できていることが確認できました。
ループ処理を含むコード
簡単なループ処理のVBAコードを「次のVBAをOffice Scriptsへ書換してください」と依頼してみます。
Sub Sample2()
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = i
Next i
End SubAIが生成したOffice Scripts
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet();
for (let i = 1; i <= 10; i++) {
sheet.getCell(i - 1, 0).setValue(i);
}
}こちらも問題なく動作しました。
AI変換で変換できない例
UserFormは変換できない
はたして、Office Scripts には存在しない VBAのUserForm は変換できるでしょうか。
単純な次のコードを試してみます。
UserForm1.Showこのようなコードは変換できません。
代替案としては
- Excelフォーム
- Power Apps
- Power Automate
などの利用になります。
・・・と返されました。
ファイル操作は難しい
VBAではよく使われるファイルシステムオブジェクト
FileSystemObjectや
Open ~ For InputはOffice Scriptsでは利用できません。
Web版ExcelはローカルPCへのアクセスが制限されています。
・・・と返されました。
生成AIに訊いた変換できないもの
「VBA→Office Scriptsに変換できないものをすべて表にまとめてください。表には「項目」「理由」「代替案」等の項目を含めてお願いします。」とプロンプトしてみた結果です。
VBA→Office Scriptsに変換できない機能一覧
| 分類 | VBA機能 | Office Scripts | 理由 | 主な代替案 |
|---|---|---|---|---|
| フォーム | UserForm | ❌ | UI機能が存在しない | Microsoft Forms、Power Apps |
| フォーム | TextBox、ComboBox等 | ❌ | ユーザー入力画面が作れない | 入力シート、Power Apps |
| フォーム | MsgBox(入力待ち) | △ | 簡易メッセージのみ | セル入力、Power Automate |
| フォーム | InputBox | ❌ | 対話型入力不可 | ワークシート入力欄 |
| ファイル操作 | FileSystemObject | ❌ | ローカルファイルへアクセス不可 | Power Automate |
| ファイル操作 | Open~Close | ❌ | ローカルファイル操作不可 | SharePoint経由 |
| ファイル操作 | Dir関数 | ❌ | フォルダ参照不可 | Power Automate |
| ファイル操作 | Kill | ❌ | ファイル削除不可 | Power Automate |
| ファイル操作 | Name | ❌ | ファイル名変更不可 | Power Automate |
| ファイル操作 | MkDir | ❌ | フォルダ作成不可 | Power Automate |
| ファイル操作 | RmDir | ❌ | フォルダ削除不可 | Power Automate |
| Windows操作 | Shell関数 | ❌ | OSコマンド実行不可 | Power Automate Desktop |
| Windows操作 | WScript.Shell | ❌ | Windows API利用不可 | PAD |
| Windows操作 | SendKeys | ❌ | キーボード操作不可 | PAD |
| Windows操作 | AppActivate | ❌ | 他アプリ操作不可 | PAD |
| Windows操作 | プロセス制御 | ❌ | 実行権限なし | PAD |
| API連携 | Declare文 | ❌ | Windows API呼出不可 | REST API利用 |
| API連携 | Win32 API | ❌ | ネイティブAPI不可 | Power Automate |
| イベント | Worksheet_Change | ❌ | イベントプロシージャなし | Power Automateトリガー |
| イベント | Workbook_Open | ❌ | ブックイベントなし | Power Automate |
| イベント | Workbook_BeforeClose | ❌ | ブックイベントなし | Power Automate |
| イベント | SelectionChange | ❌ | イベントなし | 手動実行 |
| COM連携 | CreateObject | ❌ | COM利用不可 | Power Automate |
| COM連携 | GetObject | ❌ | COM利用不可 | Power Automate |
| COM連携 | Outlook操作 | ❌ | Outlook COM不可 | Power Automate |
| COM連携 | Word操作 | ❌ | Office COM不可 | Graph API |
| COM連携 | Access操作 | ❌ | COM不可 | Power Automate |
| アドイン | Excel Add-in利用 | ❌ | VBAアドイン非対応 | Office Add-ins |
| データベース | ADO | ❌ | COM依存 | REST API |
| データベース | DAO | ❌ | COM依存 | Power Automate |
| データベース | ODBC接続 | ❌ | 直接接続不可 | Power Automate |
| メール | CDOメール送信 | ❌ | SMTP利用不可 | Power Automate |
| メール | Outlookメール作成 | ❌ | COM依存 | Power Automate |
| 印刷 | Application.Dialogs | ❌ | ダイアログ操作不可 | 手動操作 |
| 印刷 | PrintOut詳細設定 | △ | 一部制限あり | Excel標準印刷 |
| Excel環境 | Application.CommandBars | ❌ | リボン操作不可 | Office Add-ins |
| Excel環境 | カスタムメニュー | ❌ | UI拡張不可 | Office Add-ins |
| Excel環境 | VBE操作 | ❌ | 開発環境へアクセス不可 | なし |
| Excel環境 | VBProject操作 | ❌ | マクロ編集不可 | なし |
| マクロ管理 | コード生成 | ❌ | VBA編集不可 | なし |
| マクロ管理 | マクロ削除 | ❌ | VBA非対応 | なし |
| 外部参照 | 参照設定(Tools→References) | ❌ | 概念が存在しない | npmライブラリ不可 |
| ネットワーク | UNCパス操作 | ❌ | ローカルネットワーク不可 | SharePoint |
| ネットワーク | 共有フォルダ操作 | ❌ | 権限制約 | Power Automate |
| レジストリ | SaveSetting | ❌ | レジストリなし | 設定シート |
| レジストリ | GetSetting | ❌ | レジストリなし | 設定シート |
| レジストリ | DeleteSetting | ❌ | レジストリなし | 設定シート |
| システム情報 | Environ | ❌ | 環境変数取得不可 | Power Automate |
| システム情報 | ComputerName取得 | ❌ | 端末情報取得不可 | Power Automate |
| システム情報 | ユーザー情報取得 | △ | 一部取得可 | Graph API |
「絶対に変換できないもの」「一部代替可能なもの」「Power Automateなど他サービスとの組み合わせが必要なもの」が確認できます。
一部は変換できるが注意が必要な機能一覧
| VBA | Office Scripts | 注意点 |
|---|---|---|
| Application.ScreenUpdating | 不要 | 画面更新停止の概念がない |
| DoEvents | 不要 | シングルスレッド実行 |
| On Error Resume Next | 可能 | try-catchへ変換 |
| Collection | 可能 | ArrayやMapを使用 |
| Dictionary | 可能 | Mapを使用 |
| Timer関数 | 可能 | Date.now()利用 |
| XMLHTTP | 可能 | fetch()利用 |
| JSON処理 | 可能 | JSON.parse()利用 |
AIを使うときのおすすめプロンプト
生成AIに実際試してみて精度が高かった指示はこちらです。
次のVBAをOffice Scriptsへ変換してください。
~~ VBA コード ~~
条件
・Office Scriptsの最新構文を使用
・TypeScript形式
・コメントを追加
・VBAとの対応箇所も説明
・Office Scriptsで実現できない部分は代替案を提示
必要に応じて、このような条件文を加えるだけで品質が大きく向上します。生成されたものに対して後から追加で指示することもできます。
実際に使って見て感じたこと
簡単なVBAであれば、生成AIはかなり高精度でOffice Scriptsへ変換できます。判断基準はつぎのような感じです。
Office Scriptsへ移行しやすいVBA
- セル操作
- シート操作
- テーブル操作
- 集計処理
- 並べ替え
- フィルター
- CSVデータ加工
Office Scriptsだけでは難しいVBA
- UserForm
- FileSystemObject
- Outlook連携
- Access連携
- Windows API
- 他アプリ操作
移行を考える場合、「VBA → Office Scripts」だけではなく「VBA → Office Scripts + Power Automate」として考えると、実はかなり多くの処理を代替できるようです。
おわりに (まとめ)
今回の検証結果をまとめると次のようになります。
✅ セル操作は高精度で変換可能
✅ ループや条件分岐も問題なし
✅ Office Scripts初心者でも移植しやすい
❌ UserFormは変換不可
❌ ファイル操作は別方法が必要
既存VBA資産をWeb版Excelへ移行したい場合、生成AIは非常に強力な補助ツールになります。
単体で考えるだけでなく「VBA → Office Scripts + Power Automate」なども考慮に入た方がよさそうです。
今後もさまざまなVBAをOffice Scriptsへ変換しながら、実際の変換精度や注意点を検証していきたいと思います。
次回からは、当サイトで紹介した記事で使用したVBAを使って検証を深めていきます。
この記事が、少しでも誰かのお役に立てれば幸いです。
当サイトの記事で使用したVBAなどのサンプルをDLできます
この記事のサンプルはありません!
ダウンロードページへは下のカードをクリックすればジャンプできます。
よろしければご利用ください!

