例えば、Aのリストにチェックリストがあり、チェックを入れた行を別のシートの末尾に転記したい…といったプログラムを作ってみます。
行のデータを別のシートにコピーする
Google Apps Script(GAS)を使用して、特定の条件が満たされた場合に、スプレッドシート上のデータを別のシートに自動的に転記する方法について説明します。
まず、以下のスクリプトを使用して、特定の列にチェックボックスがクリックされたときに、その行のデータを別のシートにコピーする関数を作成します。
今回は「1列目のチェックボックスがチェックされたとき」という1列目のみを検知したいので、e.rangeで現在位置(セル)を検知させて、1列目の場合のみ、を入れいています。念のため、ログで値もキャッチしておきます。
function copyData(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('Sheet1'); // チェックボックスがあるシート名
var sheet2 = ss.getSheetByName('Sheet2'); // コピー先のシート名
var range = sheet1.getDataRange();
var values = range.getValues();
const cell = e.range;
const column = cell.getColumn();
const row = cell.getRow();
Logger.log("column:" + column);
Logger.log("cell:" + cell);
Logger.log("row:" + row);
const lastRow1 = sheet1.getLastRow();
const lastCol1 = sheet1.getLastColumn();
const lastRow2 = sheet2.getLastRow();
const lastCol2 = sheet2.getLastColumn();
Logger.log("lastRow1:" + lastRow1);
Logger.log("lastRow2:" + lastRow2);
Logger.log("lastCol1:" + lastCol1);
Logger.log("lastCol2:" + lastCol2);
var destValues = [];
Logger.log("destValues:" + destValues);
if (column === 1 && e.value === "TRUE") {
destValues=sheet1.getRange(row, 1, 1, lastCol1).getValues();
Logger.log("destValues:" + destValues);
sheet2.getRange(lastRow2+1,1, 1, lastCol1).setValues(destValues);
}
}
このスクリプトは、Sheet1の特定の列にあるチェックボックスがクリックされたときに、その行のデータをSheet2に自動的にコピーします。
[rml_read_more]
ひとまずスクリプトを実行して、アカウントに実行権限を与えておきます。
トリガーにバインドする
次に、このスクリプトをトリガーにバインドして、自動的に実行されるようにします。以下の手順に従って、トリガーを設定します。
- GASのプロジェクトを開きます。
- 「編集」→「現在のプロジェクトのトリガー」を選択します。
- 「トリガーを追加」をクリックして、トリガーの設定画面を開きます。
- 「copyData」という関数を選択し、イベントを「スプレッドシートから」、関数を「copyData」として設定します。
- 頻度を編集時に設定し、「保存」をクリックします。
トリガーがセットされました!
トリガーを実行する
あとは、1列目にチェックが入ったタイミングで、末尾にデータがセットされるか実践してみます。
Sheet2の方にデータが書き込まれました!
getValuesの注意点
今回の何度もはまった点ですが、getValuesを使う時にgetRangeの範囲がずれると、エラーが発生して終わってしまいます。
ですので、getRangeの範囲とgetValuesの範囲を合わせておくことがポイントです。
まとめ
これで、チェックボックスがクリックされたときに、自動的にデータが別のシートに転記されます。必要に応じて、スクリプトやトリガーの設定を調整して、自分の要件に合わせたスクリプトを作成してください。
以上が、特定の条件が満たされた場合にスプレッドシート上のデータを別のシートに自動的に転記する方法についての説明でした。GAS独特の仕組みもあり頭も混乱しますが整理しながらさらに作っていきます。
ご参考になれば幸いです。