【VBA→Office Scripts】生成AIで変換してみた

【VBA→Office Scripts】生成AIで変換してみた
目次

はじめに

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 Sub

AIが生成した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理由主な代替案
フォームUserFormUI機能が存在しない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.ShellWindows 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連携CreateObjectCOM利用不可Power Automate
COM連携GetObjectCOM利用不可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
データベースADOCOM依存REST API
データベースDAOCOM依存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など他サービスとの組み合わせが必要なもの」が確認できます。

一部は変換できるが注意が必要な機能一覧

VBAOffice 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できます

この記事のサンプルはありません!

ダウンロードページへは下のカードをクリックすればジャンプできます。
よろしければご利用ください!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

プロフィール画像は愛犬「くるみ」
ブログ名の「くるみこ」kurumico.comはここからつけました。
このブログをとおして、自分の経験から少しでも皆さまのお役に立てる情報が発信できればと思い立ち上げました。VBAは独学ですが、過去にはVBでフリーソフトを作っていた経験と仕事でExcelVBAを酷使している中での気づきなどを発信していきます。

目次