VBA との違い
Office スクリプト は ウェブ版 Excel(Excel on the Web)で動作するスクリプト言語です。
Office スクリプトも VBA も、Microsoft の開発した Office サービス上で動作するスクリプト言語であるということに違いはありません。
ただ、それぞれの言語の振る舞いや構文には大きな違いがあります。
ここでは以下のようなサンプルコードを使って、ウェブ版 Excel における Office スクリプトと、オンプレミス版 Excel における VBA の違いを解説します。
タブを切り替えることで、それぞれの言語でほぼ同等の処理を見比べることができます。
- VBA
- Officeスクリプト
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
function cubed(target: number) {
const calculated = target ** 3;
console.log(calculated);
}
function squared(target: number) {
return target ** 2;
}
この章を読んでいただくことで、以下の内容をご理解いただけます。
Office スクリプトと VBA の違い
VBA との違いの具体例
Office スクリプトの成り立ちと、ベースとなった言語のシェア
Office スクリプトの基本的な構文
基本的な機能の違い
プログラミング言語としての違いの前に、機能として異なる点をテーブルにまとめています。
項目 | VBA | Office スクリプト |
---|---|---|
実行環境 | 個々のデバイス上 | クラウド上 |
権限の管理 | パスワード | アカウント |
共有 | 〇 | 〇 |
操作の記録 | 〇 | 〇 |
他ブックの操作 | 〇 | × |
目的は同じ
振る舞いや構文は異なりますが、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 を活用してサーバー上で動作する言語としても活用されるケースが増えています。
以下のグラフは 2021 年に開発者に対してアンケートを行い、習得・利用しているプログラミング言語について集計したものです。
開発者の 6 割以上が JavaScript を使用していることが分かると思います。
ECMAScript と呼ばれる JavaScript の規格は毎年更新がなされており、Office スクリプトもこれに準拠すると思われるため、機能的にも今後拡充がなされていくと思います。
Office スクリプトに限らず使用できる場面は多いため、学習して損することはないでしょう。
異なる点の具体例
ここからは、実際に Office スクリプトを使って、VBA との違いを説明していきます。
関数の定義
VBA では、返り値を持たない関数はSub
、返り値を持つ関数はFunction
として定義します。
Office スクリプトでは、返り値の有無にかかわらずfunction
を使って定義することができます。
TypeScript であれば、アロー演算子を使って関数を再現することができますが、Office スクリプトでは許されていません。
関数定義は function でのみ実装できます。
- VBA
- Officeスクリプト
' 返り値のある関数は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
function squared(target: number) {
return target ** 2;
}
// 返り値のない関数も同様
function cubed(target: number) {
const calculated = target ** 3;
console.log(calculated);
}
変数の定義
VBA では変数定義にDim
、定数定義にConst
を使用します。
Office スクリプトでは、変数定義にlet
、定数定義にconst
を使用します。
VBA は非常に強い静的型付けを持っており、配列の要素数を後から変更する場合にも変数の再定義(ReDim
)が必要でしたが、Office スクリプトでは不要です。
- VBA
- Officeスクリプト
' 変数の定義
Dim count As Long
count = 1
' 変数に2を加算
count = count + 2
' 配列の定義
Dim fruits(0) As String
' 要素数に変更がある場合は、ReDimする必要がある
ReDim fruits(1)
fruits(1) = "リンゴ"
// 変数の定義
let count = 1;
// 変数に2を加算
count += 2;
// 定義時に要素数を指定する必要はない
const fruits: string[] = [];
// 後からいくらでも配列内に追加可能
fruits.push('リンゴ');
if 文やループ処理
if 文、ループ処理については、ぞれぞれ以下のページで解説しています。
📄️ IF文
オフィススクリプトにおける条件式の記述方法を、単一、複数それぞれについてサンプルコードと併せて紹介します
📄️ ループ処理
for文やwhile文、forEachを使ってオフィススクリプトを使って、ループ処理を実装する方法をサンプルコードと併せて解説します。