やりたいこと
Googleフォームで連携したデータを、個人情報を削いで別シートに貼り付け、元データを消す
以上を定期実行でやりたい
準備
Googleフォーム(この記事では割愛します)
Googleスプレッドシート
実装
データとシートを準備
Googleフォームからは「氏名、フリガナ、性別、電話番号、生年月日、症状」のデータが連携されるとします
マクロを記録して、大体のスクリプトを用意
すこし横着をして、実際に作業を行ってみて大体のスクリプトを作ってもらいます
台本を書きます
こういう処理をしてほしいんだよなぁ〜というのを書いて、記録されたマクロと見比べてみましょう
台本に合わせて記録したスクリプトを分解
案外そのまま使えるのがないですね。やりたいことを地道にひとつひとつ検索して潰していきましょう
実装
書いてはデバッグで試しを繰り返して動作するようになりました
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});
};