【GAS】セル内消去。シートかセルで挙動が異なるので注意!


今回はGAS(Google Apps Script)のセル内消去を見ていきます。VBAと比べ、シートを指定できます、挙動に癖があるような気がしますね。

よく使うのは、 Clear()だと思うけど、全て消せない点に注意する必要があるんだにゃ。
この記事では、
- GASでセル内の値などを消去する方法
- 削除先がシートがセルかで挙動が異なること
- clear関数で消せる範囲とオプション、限界点
- 細かい指定ができるclearの兄弟関数について
を学べます。
【オプションなし】clear()

まずは、clear()から。全ては消せないけど、オプションなしだと値と数式、フォーマットを削除できます。
シートを指定
// 値と数式、フォーマットを削除
sheet.clear();
セル範囲を指定
// 値と数式、フォーマットを削除
sheet.getRange(1, 2, 5, 1).clear();
clear(オプション)

オプションとして引数に特定の値を渡すと、消去できるものが変わります。

シートを指定するか、セル範囲を指定するかで、オプションの種類が少し異なる点に注意だにゃ。
シートを指定
与えられた詳細オプション指定でシートやフォーマットをクリアします。
オプション | タイプ | 説明 |
---|---|---|
contentsOnly | Boolean | 内容をクリアするかどうか。 |
formatOnly | Boolean | フォーマットをクリアするかどうか。 |
commentsOnly | Boolean | メモだけをクリアするかどうか。 |
// コンテンツだけ消去
sheet.clear({contentsOnly: true});
セル範囲を指定
指定された詳細オプションで指定されているように、コンテンツの範囲、フォーマット、データの入力規則、および/またはコメントをクリアします。デフォルトでは、すべてのデータがクリアされています。
名前 | タイプ | 説明 |
---|---|---|
commentsOnly | Boolean | メモだけをクリアするかどうか。 |
contentsOnly | Boolean | 内容だけをクリアするかどうか。 |
formatOnly | Boolean | フォーマットのみをクリアするかどうか。 |
validationsOnly | Boolean | データの入力規則のみをクリアするかどうか。 |
skipFilteredRows | Boolean | フィルタリングされた行をクリアしないようにするかどうか。 |
// フォーマット、データの入力規則、メモを削除
sheet.getDataRange().clear({formatOnly: true, validationsOnly: true, commentsOnly: true})
条件付き書式クリア[clearConditionalFormatRules()]

clearConditionalFormatRules()はシートを指定して、使えるんだにゃ。セル範囲指定では使えないんだにゃ。
シートを指定
シートからすべての条件付き書式規則をクリアします。空の配列を入力としてsetConditionalFormatRules(rules)を呼び出すのと同じです。
// 条件付き書式だけクリア
sheet.clearConditionalFormatRules();
値クリア[clearContent(s)()]

値だけをクリアしたい場合はclearContent(s)()を使います。シートを指定するときはclearContents、セル範囲指定ではclearContentとsがつかなくなることに注意ですね。
シートを指定[clearContents()]
フォーマット情報を保持しながら、シートをクリアします。
// 値のみクリア
sheet.clearContents();
セル範囲を指定[clearContent()]
書式設定を変更せずに、範囲の内容をクリアします。
// 値のみクリア
sheet.getDataRange().clearContent();
書式クリア[clearFormat(s)()]

書式クリアの場合でも、末尾にsが付くかどうかでシートとセル範囲の指定で変わります。
シートを指定[clearFormat(s)()]
内容を保持しながら、書式設定シートをクリアします。
書式設定とは、セルの幅や高さではなく、[書式設定]メニューの選択で許可されているデータの書式設定方法(太字、斜体、条件付き書式など)を指します。
// 書式のみクリア
sheet.clearFormats();
セル範囲を指定[clearFormat()]
この範囲の書式設定をクリアします。
これにより、範囲内の1つまたは複数のセルのテキストフォーマットがクリアされますが、数値フォーマットの規則はリセットされません。
// 書式のみクリア
sheet.getDataRange().clearFormat();
メモクリア[clearNote(s)()]

メモの場合も、シートかセル範囲指定でsをつけるかどうかを変えるんだにゃ。

メモの場合も、シートかセル範囲指定でsをつけるかどうかを変えるんだにゃ。
シートを指定[clearNotes()]
シートのすべてのメモをクリアします。
// メモを削除
sheet.getDataRange().clearNote()
セル範囲を指定[clearNote()]
特定のセルまたは複数のセルのメモをクリアします。
// メモを削除
sheet.getDataRange().clearNote()
入力規則クリア[clearDataValidations()]

入力規則を消せるのは、セル範囲を指定した時だけですね。
セル範囲を指定
clearDataValidations()
範囲のデータの入力規則をクリアします。
//入力規則をクリア
sheet.getDataRange().clearDataValidations();
まとめ
以上見てきたように、GASでの消去はいろいろあります。
イメージとしては、clear()にオプションを付けて使うか、それぞれの特化したメソッドを使うかという感じに分類できて、基本どちらでも構わないと思います。好きな方を使ってください。
補足として、書式設定やコメントは消えず、一括での消去(シートの初期化)は簡単にはできないようです。
個人的なやり方としては、
- 書式設定の削除 → 標準に戻す
- コメントの削除 → コメント操作を使わず、メモを使用する
- 初期化 → 複数のクリアの併用、シートの削除と再作成
が良いと考えています。
*コメントについては、できないわけではないようですが、標準機能によるGASからのコメント操作が難しいようです。
【VBA】セル内消去のやり方。全部消す方法から一部を消す方法まで。