GASでスプレッドシートの指定範囲の値をクリアする

## はじめに

:::note info
※本記事は、GAS(Google Apps Script)やバッチファイルを使って、バックオフィス周りの業務効率化、業務改善を実施している非エンジニアによる記事です。
:::

スプレッドシートを利用していて、以下のような定型業務が日次、週次、月次で頻繁に発生していました。

**1. スプレッドシートの複数タブの指定範囲の値をクリアする。**
**2. クリアした後、システムから出力した複数のcsv(1万レコード以上)を、値をクリアした各タブに反映する。**
**3. 反映されたcsvを下に、別タブにデータ抽出を関数等で自動抽出する。**

上記の中で、「指定範囲の値をクリア」する作業が少しストレスでした。
※データ量によっては範囲選択してクリアするのに少し時間もかかります。

本記事では、**GASを活用して複数タブの指定範囲を一括でクリアする** 方法を解説します。

---
## 実践するスクリプトの概要

### 主な機能

- 特定のタブの指定範囲をクリアする関数を作成
- 複数タブに対して順番にクリア処理を実行する関数を作成

---
## コード

以下は、特定のタブの指定範囲をクリアするスクリプトです。

```javascript
// その1タブの指定範囲をクリア
function deleteData1() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheetname = 'その1';
  const sheet = spreadsheet.getSheetByName(sheetname);
  sheet.getRange('C3:D').clearContent();
}

// その2タブの指定範囲をクリア
function deleteData2() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheetname = 'その2';
  const sheet = spreadsheet.getSheetByName(sheetname);
  sheet.getRange('C3:D').clearContent();
}

// その3タブの指定範囲をクリア
function deleteData3() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheetname = 'その3';
  const sheet = spreadsheet.getSheetByName(sheetname);
  sheet.getRange('C3:D').clearContent();
}
```
上記を、まとめて実行する関数も用意しておきます。

```javascript
// 複数タブの指定範囲クリアをまとめて実行
function all() {
  deleteData1();
  deleteData2();
  deleteData3();
}
```
---

## 実行手順

1. **スプレッドシートを新規作成**
`その1`、`その2`、`その3`という名前のタブを作成します。
![スクリーンショット 2025-01-01 17.30.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628613/1d0f5fa6-8ab6-7e73-8ef9-95c3a3307f85.png)

2. **スクリプトを記述**
`拡張機能`→`Apps Script`をクリックし、GASプロジェクトを新規作成し、上記コードをコピー＆ペーストしてください。
※GASのファイル名は、ご自身にとって分かりやすいファイル名にしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628613/4d0477f7-7fd2-4998-e606-0b8143d74f93.png)

3. **スクリプトを実行**
   - `all()`を実行すると、3つのタブの指定範囲（`C3:D`列）がすべてクリアされます。
:::note info
スプレッドシートのメニューバーからスクリプト実行できるようにしておくと便利です。
[詳しいやり方はこちらから](https://qiita.com/yuto-h/items/a683d8ac45ad00645e98)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628613/56d68e1e-d802-ff6a-210c-3401db5a1830.png)


```javascript
// メニューを作成
function onOpen() {
  var ui = SpreadsheetApp.getUi();  // UIを取得する
  var menu = ui.createMenu("スクリプト実行"); // カスタムメニューを作成
  menu.addItem("「その1」タブの「C3:D」の値をクリアする", "deleteData1"); // メニューアイテムを追加
  menu.addItem("「その2」タブの「C3:D」の値をクリアする", "deleteData2"); // メニューアイテムを追加
  menu.addItem("「その3」タブの「C3:D」の値をクリアする", "deleteData3"); // メニューアイテムを追加
  menu.addItem("全タブの指定範囲の値をクリアする", "all"); // メニューアイテムを追加
  menu.addToUi(); // メニューをUIに追加
}
```

---

## スクリプトの解説

### 1. 各タブの範囲をクリアする関数(例：`deleteData1`)

```javascript
function deleteData1() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheetname = 'その1';
  const sheet = spreadsheet.getSheetByName(sheetname);
  sheet.getRange('C3:D').clearContent();
}
```

この関数では、次の処理を行っています：

1. **スプレッドシートの取得**
   - `SpreadsheetApp.getActiveSpreadsheet()`を使用して、現在アクティブなスプレッドシートを取得します。

2. **シートの取得**
   - `getSheetByName(sheetname)`で特定のタブを取得します。

3. **指定範囲のクリア**
   - `getRange('C3:D').clearContent()`で、指定範囲内のデータをクリアします。

他のタブについても同様の構造で、タブ名(`sheetname`)を変更するだけです。

### 2. 全体をまとめて実行する関数

```javascript
function all() {
  deleteData1();
  deleteData2();
  deleteData3();
}
```

この関数は、`deleteData1()`、`deleteData2()`、`deleteData3()`を順番に呼び出し、それぞれのタブの指定範囲をクリアします。一括で処理を実行したい場合に便利です。

---

## おわりに

少し地味なGASに思えますが、そこそこ頻度が高い定型業務の場合、サクサクと作業を進める一助になるはずです◎

ぜひ試してみてください！