OfficeScriptsで名言ボットを作ってみた⑫ セルの値をクリアしたい🙂clearメソッド
こんにちは。aliceです。
OfficeScripts初心者が名言ボットを作ってみたシリーズ。はじめてのOfficeScripts。
今回はセルの値を消してみます。
OfficeScriptsとPowerAutomateで名言ボットを作りました。(OfficeScriptsの使用にはweb版のExcelとライセンスが必要です。)
前回のあらすじ
D列に「TRUE」が入っていない場合は「TRUE」を入れるという処理をしました。
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet();
let range = sheet.getUsedRange();
let rangeValues = range.getValues();
let word = "";
let lastRow = range.getRowCount();
for (let i = 1; i <= lastRow; i++) {
if (rangeValues[i][3] === "") {
word = `${rangeValues[i][1]}`;
sheet.getCell(i, 3).setValue("True");
}
}
}
これだと、これで終わり!お疲れ!ふー(;′⌒`)となってしまうので、最後の列まで「TRUE」が入ったらD列に入っているすべての「TRUE」を消すという処理をします。これで永遠にボットを送り続けられます!
1 クリアしたいセル範囲を取得する
とりあえず次のコードを追加します。
if (i >= lastRow-1) {
let address = "D2:D" + lastRow;
sheet.getRange(address).clear(ExcelScript.ClearApplyTo.contents);
}
全体像はこんな感じ。
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet();
let range = sheet.getUsedRange();
let rangeValues = range.getValues();
let word = "";
let lastRow = range.getRowCount();
for (let i = 1; i <= lastRow; i++) {
if (rangeValues[i][3] === "") {
word = "" + rangeValues[i][1];
sheet.getCell(i, 3).setValue("True");
if (i >= lastRow - 1) { //←ここに追加
let address = "D2:D" + lastRow;
sheet.getRange(address).clear(ExcelScript.ClearApplyTo.contents);
}
}
}
}
まず、クリアしたいセル範囲を指定します。
let address = "D2:D" + lastRow;
sheet.getRange(address)
変数addressにクリアしたいセル範囲を入れます。
この場合だと「D2:D10」セルです。
そのあと、セル範囲を取得。
パラメーター
省略可能。 範囲のアドレスまたは名前を表す文字列。 たとえば、"A1:B2" とします。 指定されていない場合は、ワークシート全体の範囲が返されます。
getRangeメソッドのパラメーターは「"A1:B2" 」の形式なんですね。
ということで
let address = "D2:D" + lastRow;
ここで「"D2:D10"」の形式にしています。
というかこれしか思いつきませんでした╯︿╰
2 clearメソッド
clearメソッドは範囲の値、書式、塗りつぶし、罫線などをクリアしたいときに使います。
範囲の値、書式、塗りつぶし、罫線などをクリアします。
clear(applyTo?: ClearApplyTo): void;
パラメータ
applyTo ExcelScript.ClearApplyTo
省略可能。 クリア操作の種類を決定します。 詳細は「ExcelScript.ClearApplyTo」をご覧ください。
ということなので「ExcelScript.ClearApplyTo」を見に行きます。
4つありました。
今回は内容をすべてクリアしたいので「contents」を使います。
sheet.getRange(address).clear(ExcelScript.ClearApplyTo.contents);
sheet.getRange(address).clearcontentsと書きたいですけどね。というか書きましたけどね。もちろんエラーになりましたo( ̄┰ ̄*)ゞ
ではでは実行してみます。
ちゃんとクリアできた!
D列の「TRUE」が消えています。
セリフをconsole.logで出力してみたのですがちゃんと3行目から出力されました!
3 今日のまとめ
・getRangeメソッドのパラメーターは「"A1:B2" 」の形式
・セル範囲の内容をクリアしたいときはclearメソッドを使う
お疲れさまでした。