見出し画像

Excel VBAしか知らない私が、Excel Scriptを独学(1)

Web版のExcelは、VBAが使えない代わりに Excel Script(Excel on the web のOfficeスクリプト)が使えるらしいが、VBAしか知らない私でも習得できるのか? Excel Script についての取り組みを VBA と比較しながら書いていこうと思います。

※Microsoft 365 Personal に Excel Script は含まれていません。使用したい人は一般法人向けプランへの切り替えが必要です。

新しいスクリプト

Web版 Excel の自動化タブから、すべてのスクリプトを開き「新しいスクリプト」を追加してみる。

function main(workbook: ExcelScript.Workbook)
{
 // Your code here
}

function の後のmainはスクリプト名ではなくmain関数です
main(workbook: ExcelScript.Workbook)で 、Excel Scriptであることを宣言し、{ } 内に処理(命令文)を書きます

VBAでプロシージャを追加したときの「Sub ○○」「Function ○○」のようにmainを好きな名前に変更しちゃダメなんだね。

セルに記入(getRange,getCell,setValue)

function main(workbook: ExcelScript.Workbook)
{
 workbook.getActiveWorksheet().getRange("A1").setFormulaLocal("=TODAY()");
 workbook.getWorksheet("Sheet1").getCell(1, 0).setValue("Hello World");
}

1行目 アクティブシートのセルA1に関数「=TODAY()」を記入する命令
2行目 Sheet1のセルA2に文字「Hello World」を記入する命令
それぞれの命令文の最後は改行ではなく; を付けます

.(ピリオド)でオブジェクトを繋ぐのはVBAと似てるけど改行には意味がないんだ。だからVBAで :(コロン)を入れるのと同じ意味で ;(セミコロン)を付けないとエラーになるんだね。
VBAでは「Range().Value = 値」のようにオブジェクト = プロパティで値を設定していたけど、Excel Script 「setValue(値)」はメソッドのパラメータとして()に設定するところも慣れが必要かもね。
それからセル番地(Row,Column)が、VBAのCells関数だと(1,1)から始まっていたのに対し、Excel Script の getCell(行,列)は(0,0)が起点なんだ。つまりgetCell(0,0)がセルA1になるから注意しなきゃだね。

定数・変数(const,let)

function main(workbook: ExcelScript.Workbook)
{
 const WS = workbook.getActiveWorksheet();
 let i = WS.getCell(0,0).getValue();
 WS.getCell(2, 0).setValue(i);
}

1行目 定数 WS にアクティブシートをセット
2行目 変数 i にセル A1 の値をセット
3行目 セル A3 に変数 i の値を記入する

constは定数宣言、letは変数宣言です。宣言と同時に初期値を = でセットします。定数と変数の違いは宣言後の変更ができるかできないかですね。

データ型の記述は基本的に不要なんだ。””で囲ってたらString、数値ならNumber、true/falseならBooleanのように柔軟に変化するんだね。VBAのようにオブジェクトを設定する場合も Set を付ける必要はないんだね。

次回は...

スクリプトするなら条件分岐が基本。
と言うことで、次回はそのあたりを書けたらいいな。

この記事が気に入ったらサポートをしてみませんか?