Officeスクリプト VBAとOfficeスクリプトの違いと変換

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);
}

生成AIなので複雑なコードの場合 多少のミスが出ることはあります。その場合は 何行目でどんなエラーが発生したか再度生成AIに聞けば修正したコードを教えてくれます。

Sponsored link

Officeスクリプトの学習

オフィススクリプトを書籍で学習したいという方はコチラがオススメです。

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

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次