スプレッドシートのデータをマスキングするスクリプトを定期実行する

# やりたいこと
Googleフォームで連携したデータを、個人情報を削いで別シートに貼り付け、元データを消す
以上を定期実行でやりたい

# 準備
Googleフォーム(この記事では割愛します)
Googleスプレッドシート

# 実装

## データとシートを準備
Googleフォームからは「氏名、フリガナ、性別、電話番号、生年月日、症状」のデータが連携されるとします
![スクリーンショット 2022-03-17 1.09.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/c1a5ddd4-0414-053e-21b1-8e009bcd9a6f.png)

氏名とフリガナを削いで別シートに保存するのが目的です
![スクリーンショット 2022-03-17 1.09.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/ad2dada3-da90-9fef-4b0a-a8bd3eec1451.png)

## マクロを記録して、大体のスクリプトを用意
すこし横着をして、実際に作業を行ってみて大体のスクリプトを作ってもらいます
![スクリーンショット 2022-03-17 1.10.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/58dc19b0-dc5a-d629-05cc-4c9538f9694d.png)
![macro.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/5036feb8-9b2c-9701-b535-bb22f0e533e8.gif)

## 台本を書きます
こういう処理をしてほしいんだよなぁ〜というのを書いて、記録されたマクロと見比べてみましょう
![スクリーンショット 2022-03-17 1.26.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/82001339-353d-b7a1-427b-90c117ddd2ab.png)

## 台本に合わせて記録したスクリプトを分解
案外そのまま使えるのがないですね。やりたいことを地道にひとつひとつ検索して潰していきましょう
![スクリーンショット 2022-03-17 1.32.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/ce15e8b4-c4d5-6f44-0fff-03a3d425e95e.png)

## 実装
書いてはデバッグで試しを繰り返して動作するようになりました
```js
function test() {
  // シート1の性別にカーソルを合わせる
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('シート1'), true);
  // シート1の性別のすぐ下にデータがあるか確認
  var cell = spreadsheet.getRange("C2");
  if (cell.isBlank()) {
    // データがない場合(1) ===============
    // 終了
  } else {
    // データがある場合(1) ===============
    // コピーする範囲を求める
    var lastRow = spreadsheet.getLastRow();
    var copyRange = '\'シート1\'!C2:F' + lastRow
    // シート「マスキングデータ」を開く
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('マスキングデータ'), true);
    // シート「マスキングデータ」の性別のすぐ下にデータがあるか確認
    var cell = spreadsheet.getRange("A2");
    if (cell.isBlank()) {
      // データがない場合(2) ---------------
      // データをコピー
      spreadsheet.getRange(copyRange).copyTo(cell, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false)
      // シート1のデータを削除
      clear_sheet1()
    } else {
      // データがある場合(2) ---------------
      // 最後のデータを選択
      var lastRow = spreadsheet.getLastRow();
      // その下を選択
　　　　　　　　　　　lastRow =　lastRow + 1
      var cell = spreadsheet.getRange("A" + lastRow);
      // データをコピー
      spreadsheet.getRange(copyRange).copyTo(cell, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false)
      // シート1のデータを削除
      clear_sheet1()
    };
  };
};

// ここはまんまマクロで記録したものが使えました
function clear_sheet1() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('シート1'), true);
  spreadsheet.getRange('A2').activate();
  var currentCell = spreadsheet.getCurrentCell();
  spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.NEXT).activate();
  currentCell.activateAsCurrentCell();
  currentCell = spreadsheet.getCurrentCell();
  spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
  currentCell.activateAsCurrentCell();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
```

## 定期実行の設定
AppScriptのトリガーを選択し
![スクリーンショット 2022-03-17 2.13.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/018a6ac3-d969-ea9d-8ed8-ce6c4d98d2d5.png)

![スクリーンショット 2022-03-17 2.13.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/5b989d29-9d72-614a-f8f4-1c56fd448391.png)

イベントのソースを「時間主導型」にし、処理が実行される時間を指定します
![スクリーンショット 2022-03-17 2.14.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27192/ec591d44-f49f-a2b5-aa67-70c217640d5e.png)