ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
【GAS】1行のデータを別シートにコピーし行を削除する方法
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
- Javascriptで先月のデータか否かの判別方法がわかります。
- チェックボックスのデータを移動させる方法がわかります。
なので、サクッとマスターして
と答えてあげてください。
いただいた質問
動画を見ながらシート移動はできたのですが、元セルに「チェックボックス」が入っていた場合、移動したセルには「FALSE」となってしまいます。
そのままコピーするにはどうしたらよいでしょうか?ヒントなるようなお助けをいただけたら幸いです。
前回のロジックの場合、チェックボックスは「TRUE」or「FALSE」に置き換わってしまいます。
それを回避するには、
・予めその列をチェックボックスに指定しておく
あるいは、
・insertCheckboxes() でチェックボックスを指定します。
動画はこちら
シートはこちら
*クリックすることでシートが開きます。(コピーしてお使いください)
スクリプト
function movelog() {
const STROW = 7 //移送元開始行
const DATACLM = 28 //データのカラム数
const ssh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("稟議情報一覧(マスタ)")
const dsh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("稟議情報アーカイブ")
const today = new Date()
const mfast_date = new Date(today.getFullYear(), today.getMonth(), 1); //今月の1日を作成
console.log("fast_date=", mfast_date)
//1.今月の始まりを取得する これより小さければ先月
//2.先月までのデータを移動させる
//3.チェックボックスを設定する
const lrow = ssh.getLastRow()
console.log(lrow)
let dtrow = dsh.getLastRow() + 1 //転送先開始行
for (i = lrow; i >= STROW; i--) {
const vals = ssh.getRange(i, 1, 1, DATACLM).getValues()
if (mfast_date > vals[0][3]) {
console.log(i, "先月以前の行")
dsh.getRange(dtrow, 1).insertCheckboxes()
dsh.getRange(dtrow++, 1, 1, DATACLM).setValues(vals)
ssh.deleteRow(i)
}
}
}
ポイント
月末の判別方法
月の終わり(月の末日)を取得するのは、微妙にメンドイのでその月の1日を取得します。
const mfast_date = new Date(today.getFullYear(), today.getMonth(), 1); //今月の1日を作成
後のは、その日付より小さければ先月までのデータを言うことになります。
if (mfast_date > vals[0][3])
チェックボックスの設定
チェックボックスを設定するには、insertCheckboxes()
を使用します。
今回の場合は、1列目固定なので、
dsh.getRange(dtrow, 1).insertCheckboxes()
としています。
最後までご覧いただきありがとうございます。
つぎはこちら
【GAS】プルダウンが変更された際に内容にしたがって処理する(onEdit)