![見出し画像](https://assets.st-note.com/production/uploads/images/50119026/rectangle_large_type_2_48e8bccd375384b976404ff72decc874.jpg?width=1200)
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 を付ける必要はないんだね。
次回は...
スクリプトするなら条件分岐が基本。
と言うことで、次回はそのあたりを書けたらいいな。
この記事が気に入ったらサポートをしてみませんか?