Guide
VBAからOffice Scriptsへ移行するときの考え方
VBA は Excel デスクトップ前提で設計されている一方、Office Scripts は Excel on the web と Power Automate 連携を前提にした TypeScript ベースの仕組みです。構文変換だけでなく、 実行環境の差を理解して置き換えることが重要です。
まず押さえるべき違い
- VBA の `Activate` `Select` は不要です。Office Scripts では対象 Range を直接参照します。
- `MsgBox` `InputBox` のようなダイアログは、そのままでは使えません。
- `WithEvents` `UserForm` `CreateObject` `Declare` は高確率で再設計が必要です。
- ファイル操作や COM 連携は Power Automate や別 API へ分離する設計が現実的です。
移行しやすいパターン
- セルの読込・書込、簡単なループ、If 分岐、文字列処理、集計前処理
- 一つのシート内で完結する書式設定や値の更新
- Sub や Function 単位で責務が分かれた VBA モジュール
移行しにくいパターン
- イベント駆動のブック制御
- ActiveX やユーザーフォーム
- Windows API 呼び出し、外部 COM、自動保存やファイル操作
- 複数ブックを横断する複雑な運用マクロ
おすすめの進め方
- まず VBA を関数単位に分け、入出力が明確なものから変換する
- このツールで Office Scripts のたたき台を作る
- 未対応機能や警告をもとに、UI・イベント・外部連携を別設計に分離する
- Excel on the web 上でシート名、Range 参照、返り値を検証する
よくある置き換え例
- `Cells(i, 1).Value = ...` → `sheet.getCell(i - 1, 0).setValue(...)`
- `Range("A1:C10")` → `sheet.getRange("A1:C10")`
- `MsgBox` → `console.log` やシートへの結果書き込み
- `ThisWorkbook.Sheets("Data")` → `workbook.getWorksheet("Data")`
変換を試す場合は トップページのツール を使ってください。