見出し画像

OfficeScriptsで名言ボットを作ってみた⑫ セルの値をクリアしたい🙂clearメソッド

こんにちは。aliceです。

OfficeScripts初心者が名言ボットを作ってみたシリーズ。はじめてのOfficeScripts。

今回はセルの値を消してみます。


OfficeScriptsとPowerAutomateで名言ボットを作りました。(OfficeScriptsの使用にはweb版のExcelとライセンスが必要です。)

前回のあらすじ

D列に「TRUE」が入っていない場合は「TRUE」を入れるという処理をしました。

画像1

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);
     }
   }
 }
}

画像2

まず、クリアしたいセル範囲を指定します。

let address = "D2:D" + lastRow;

sheet.getRange(address)

変数addressにクリアしたいセル範囲を入れます。

この場合だと「D2:D10」セルです。

そのあと、セル範囲を取得。

画像3

パラメーター
省略可能。 範囲のアドレスまたは名前を表す文字列。 たとえば、"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

4つありました。

今回は内容をすべてクリアしたいので「contents」を使います。

sheet.getRange(address).clear(ExcelScript.ClearApplyTo.contents);

sheet.getRange(address).clearcontentsと書きたいですけどね。というか書きましたけどね。もちろんエラーになりましたo( ̄┰ ̄*)ゞ

ではでは実行してみます。

画像5

ちゃんとクリアできた!

画像6

D列の「TRUE」が消えています。

セリフをconsole.logで出力してみたのですがちゃんと3行目から出力されました!


3 今日のまとめ

・getRangeメソッドのパラメーターは「"A1:B2" 」の形式

・セル範囲の内容をクリアしたいときはclearメソッドを使う


お疲れさまでした。

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