コンテンツにスキップ

VBA との違い

Office スクリプトは、Excel on the web(ウェブ版 Excel)、Excel for Windows、Excel for Mac で動作するスクリプト機能です。

Office スクリプトも VBA も、Microsoft が開発した、Office 製品上で動作する自動化の仕組みであることに変わりはありません。

ただ、それぞれの言語の振る舞いや構文には大きな違いがあります。

ここでは以下のようなサンプルコードを使って、Office スクリプトと、デスクトップ版 Excel の VBA の違いを解説します。

タブを切り替えることで、それぞれの言語でほぼ同等の処理を見比べることができます。

Public Sub Cubed(ByVal target As Long)
Dim calculated As Long
calculated = target ^ 3
Debug.Print (calculated)
End Sub
Public Function Squared(ByVal target As Long)
Squared = target ^ 2
End Function

プログラミング言語としての違いの前に、機能として異なる点をテーブルにまとめています。

項目 VBA Office スクリプト
対応する Excel デスクトップ版(Windows・Mac) ウェブ版・Windows 版・Mac 版
アクセスできる範囲 PC 全体(Excel と同等の権限) 対象のブックのみ
権限の管理 パスワード アカウント
共有 〇 〇
操作の記録 〇 〇
他ブックの操作 〇 ×
Power Automate からの実行 × 〇
ライセンス デスクトップ版 Excel に付属 対象の Microsoft 365 ライセンス

※「Power Automate からの実行」はクラウドフローの場合です。Power Automate for desktop では、「Excel マクロの実行」アクションで VBA マクロを実行できます。

振る舞いや構文は異なりますが、Office サービス内のデータをプログラムを使って動的に制御するという目的は同じです。

Excel のセル上に定義する関数とは異なり、シート数やシートの行数・列数にとらわれずデータを制御することができます。

また、外部サービスとの連携(fetchによる外部呼び出し)や、Power Automate を介したほかのブック・サービスとの連携など、セル上の関数では難しい処理も実現できます。

VBA はデスクトップ版 Excel を前提とした仕組みで、個々の PC 上で実行されます。Excel と同等の権限を持つため、PC 上のファイルや他のアプリケーションにもアクセスできます。

一方、Office スクリプトは クロスプラットフォームで共通の JavaScript ランタイム上で実行され、どの環境から実行しても同じように動作するよう設計されています。 アクセスできるのは対象のブックのみで、スクリプトを実行している PC にはアクセスできません。

また、Office スクリプトは Power Automate のフローから実行することもでき、Excel を開かずに、スケジュールやメールの受信などのトリガーをきっかけとしてブックを更新できます。

オフィススクリプトは TypeScript をベースとしています。

また、TypeScript は JavaScript に静的型付け機能を追加した言語であり、型定義を除くと記述方法は JavaScript とほとんど同じになります。

言語としては VBA より Google Apps Script に近い

Section titled “言語としては VBA より Google Apps Script に近い”

Google スプレッドシートのマクロ機能として利用できる Google Apps Script も JavaScript をベースとしています。

ブックやシートを操作する関数やメソッド名は違うものの、VBA よりは Google Apps Script に近いといえます。

JavaScript は最も利用者の多い言語の 1 つとされており、ウェブブラウザ上で動作する言語です。

また、Node.js を活用してサーバー上で動作する言語としても活用されるケースが増えています。

ECMAScript と呼ばれる JavaScript の規格は毎年更新されていますが、Office スクリプトで使える TypeScript はバージョン 4.0.3 に固定されており、それ以降に追加された TypeScript の機能は使用できない点に注意が必要です。

とはいえ、JavaScript・TypeScript は Office スクリプトに限らず使用できる場面が多いため、学習して損することはないでしょう。

ここからは、実際に Office スクリプトを使って、VBA との違いを説明していきます。

VBA では、返り値を持たない関数はSub、返り値を持つ関数はFunctionとして定義します。

Office スクリプトでは、返り値の有無にかかわらずfunctionを使って定義することができます。

関数定義のサンプル
' 返り値のある関数はFunctionを使う
Public Function Squared(ByVal target As Long)
Squared = target ^ 2
End Function
' 返り値のない関数はSubを使う
Public Sub Cubed(ByVal target As Long)
Dim calculated As Long
calculated = target ^ 3
Debug.Print (calculated)
End Sub

VBA では変数定義にDim、定数定義にConstを使用します。

Office スクリプトでは、変数定義にlet、定数定義にconstを使用します。

VBA では、配列の要素数を後から変更する場合に、動的配列として宣言したうえでReDimによる再定義が必要でしたが、Office スクリプトでは不要です。

変数定義のサンプル
' 変数の定義
Dim count As Long
count = 1
' 変数に2を加算
count = count + 2
' 配列の定義(要素数を後から変更する場合は、要素数を指定せずに宣言する)
Dim fruits() As String
ReDim fruits(0)
' 要素数に変更がある場合は、ReDimする必要がある(Preserveで既存の値を保持)
ReDim Preserve fruits(1)
fruits(1) = "リンゴ"

if 文、ループ処理については、それぞれ以下のページで解説しています。