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、自動保存やファイル操作
  • 複数ブックを横断する複雑な運用マクロ

おすすめの進め方

  1. まず VBA を関数単位に分け、入出力が明確なものから変換する
  2. このツールで Office Scripts のたたき台を作る
  3. 未対応機能や警告をもとに、UI・イベント・外部連携を別設計に分離する
  4. 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")`

変換を試す場合は トップページのツール を使ってください。