OfficeScripts(オフィススクリプト)とVBAマクロの違い と VBAマクロをスクリプトに変換するおススメの方法を紹介しています。

マクロとスクリプトの違いがわかるように同じ処理を対比させて載せていますので参考にしてみてください
VBAとOfficeスクリプトの違い
まずはVBAとOfficeスクリプトの主な違いを紹介します。
対象環境
まずは主に使用する環境が異なります。VBAはローカル、Officeスクリプトはクラウドが中心となります。
- VBAマクロ
- 主にデスクトップ版のExcelで動作する。
- ローカル環境での操作が中心。
- Officeスクリプト
- 主にExcel Online(Web版)で動作します。
- クラウド環境(Microsoft 365)での操作が中心。
- Power Automateと連携して自動化フローを構築可能。
言語の構文
次に言語の違いがあります。実施できることはほぼ同じですが、書き方に違いがあります。
- VBA: Visual Basic for Applications (VBベースの構文)
- Officeスクリプト: TypeScriptベースの構文(JavaScriptに似た書き方)
よく使う処理を後述してますので比較してみてください。
別ブックの操作
開いているブックの操作はVBAとOfficeスクリプトはほぼ変わりはありませんが、別ブック・別ファイルを操作においては違いがあります。
- VBA:別ブックの操作が可能
- Officeスクリプト:単体では別ブックの操作ができない(PowerAutomateと連携して操作可能)
ここが私が使用していて一番違いを感じた部分です。この部分を補うPowerAutomateとの連携方法についてはこちらで紹介していますので参考にしてみてください。


Sponsored link
コード記述方法の違い(具体例)
いくつかよく使う処理をVBAとOfficeスクリプトで紹介します。
対比して比べることで記載方法の違いがわかると思います。
メッセージ表示
メッセージ表示の例として「Hello, World!」と表示コードを紹介します。
VBA
Sub Message()
MsgBox "Hello, World!"
End Sub
Officeスクリプト
function main(workbook: ExcelScript.Workbook) {
console.log("Hello, World!");
}
シート操作
シート操作の例としてアクティブシートを取得するコードを紹介します。
VBA
Sub GetActiveSheet()
Dim ws As Worksheet
Set ws = ActiveSheet
End Sub
Officeスクリプト
function main(workbook: ExcelScript.Workbook) {
let ws = workbook.getActiveWorksheet();
}
セル操作
セル操作の例としてアクティブシートのセルA1に「Hello」と書き込むコードを紹介します。
VBA
Sub SetCellValue()
Worksheets("Sheet1").Range("A1").Value = "Hello"
End Sub
Officeスクリプト
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getWorksheet("Sheet1");
sheet.getRange("A1").setValue("Hello");
}
ループ処理
ループ処理の例として1~5を順番に表示するコードを紹介します。
VBA
Sub LoopExample()
Dim i As Integer
For i = 1 To 5
MsgBox i
Next i
End Sub
Officeスクリプト
function main(workbook: ExcelScript.Workbook) {
for (let i = 1; i <= 5; i++) {
console.log(i);
}
}
条件分岐
条件分岐の例として設定した値が「5より大きい」か「5より小さい」か表示するコードを紹介します。
例の値を10としていますので、「5より大きい」と表示されます。
VBA
Sub SimpleIf()
Dim value As Integer
value = 10
If value > 5 Then
MsgBox "5より大きい"
Else
MsgBox "5より小さい"
End If
End Sub
Officeスクリプト
function main(workbook: ExcelScript.Workbook) {
let value = 10;
if (value > 5) {
console.log("5より大きい");
} else {
console.log("5より小さい");
}
}
Sponsored link
VBAマクロをOfficeスクリプトに変換する
VBAマクロをOfficeスクリプトに変換するおススメの方法は「生成AI(ChatGPT)に依頼する」ことです。
下記のようなプロンプトを生成AIに指示すれば Officeスクリプトに変換して回答してくれます。
以下のVBAコードをOfficeスクリプトに変換してください。コードの動作を維持し、コメントを付けて説明してください。
VBAコード:
※ここにVBAコードを記載する
検証
試しに下記のプロンプトを生成AIに依頼してみました。
処理の内容はSheet1のセル範囲A1:B10の値をセル範囲D1;E10にコピーするものです。
以下のVBAコードをOfficeスクリプトに変換してください。コードの動作を維持し、コメントを付けて説明してください。
VBAコード:
Sub CopyData()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Range("A1:B10").Copy Destination:=ws.Range("D1")
End Sub
返ってきた回答はこちらです。下記をOfficeスクリプトで実行すると問題なく動作します。
function main(workbook: ExcelScript.Workbook) {
// Sheet1を取得
let sheet = workbook.getWorksheet("Sheet1");
// A1:B10の範囲をコピーしてD1に貼り付け
let sourceRange = sheet.getRange("A1:B10");
let destinationRange = sheet.getRange("D1");
destinationRange.copyFrom(sourceRange);
}
Sponsored link
オフィススクリプトを書籍で学習したいという方はコチラがオススメです。
コメント