メインコンテンツまでスキップ

VBA との違い

Office スクリプト は ウェブ版 Excel(Excel on the Web)で動作するスクリプト言語です。

Office スクリプトも VBA も、Microsoft の開発した Office サービス上で動作するスクリプト言語であるということに違いはありません。

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

ここでは以下のようなサンプルコードを使って、ウェブ版 Excel における 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
このページで学べる内容

この章を読んでいただくことで、以下の内容をご理解いただけます。

  • Office スクリプトと VBA の違い

  • VBA との違いの具体例

  • Office スクリプトの成り立ちと、ベースとなった言語のシェア

  • Office スクリプトの基本的な構文

基本的な機能の違い

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

項目VBAOffice スクリプト
実行環境個々のデバイス上クラウド上
権限の管理パスワードアカウント
共有
操作の記録
他ブックの操作×

目的は同じ

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

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

また、Excel ブック自体の制御や外部サービスとの連携など、1 つの Excel ファイルの枠を越えてデータを取り扱うことができます。

実行環境について

従来のオンプレミス版 Excel は個々の PC にインストールして使用するため、VBA の実行環境も個々の PC になります。

Office スクリプトの場合、実行環境はクラウド上になります。 個々の PC のリソースを消費することはありません。

ベースとなる言語について

冒頭でも少し説明しましたが、オフィススクリプトは TypeScript をベースとしています。

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

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

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

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

JavaScript について

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

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

note

以下のグラフは 2021 年に開発者に対してアンケートを行い、習得・利用しているプログラミング言語について集計したものです。

プログラミング言語のシェア

開発者の 6 割以上が JavaScript を使用していることが分かると思います。

ECMAScript と呼ばれる JavaScript の規格は毎年更新がなされており、Office スクリプトもこれに準拠すると思われるため、機能的にも今後拡充がなされていくと思います。

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

異なる点の具体例

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

関数の定義

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

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

アロー演算子について

TypeScript であれば、アロー演算子を使って関数を再現することができますが、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(0) As String

' 要素数に変更がある場合は、ReDimする必要がある
ReDim fruits(1)
fruits(1) = "リンゴ"

if 文やループ処理

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