質問: sct.getRange(lr1+1,2,1,1).setValues(name); for ( var i=3 ; i
回答: とりあえず、`if (out_time == (16,23,24) ){`を`if (out_time == 16 || out_time == 23 || out_time == 24) ){`としてください。話はそれからです。 -- iとjのifの件 `var j = trunc(i);`とするだけでこの膨大なifをやめることができます。 なおtruncは下記のように作りました(5に、iから6を引いて4ごとに3を足す、という意味と理解しました。そうでなくても意味を考えれば算数で求まるはずです)。 ``` function testTrunc() { Logger.log([6,7,8,9,10,11].map(function(element, index, array) { return trunc(element); })); } function trunc(i) { return 5 + (Math.floor((i - 6) / 4) * 3); } ``` -- 田中さんの件 要件がわからなすぎます。 test()内のシート1がコピー元シート名、シート2がコピー先シート名、範囲を指定するとコピーできます。 ただし、範囲は、両方のシートで同じで、全く同じデータ構成で、まるっと上書きすることが前提です。 (列の構成が違う場合は詳細な仕様を開示していただかないとサンプルコードは書くことができません) (ちなみに田中さんが2人以上いたばあい、コピー元も先も最初に出て来た人からコピーし、最初に出て来た人にコピーする、という動きになります) ``` function test() { CopyDat("シート1", "シート2", "A1:F3", "田中", 0); } function CopyDat(srcSheetName, dstSheetName, range , needle , col) { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var src = spreadsheet.getSheetByName(srcSheetName).getRange(range).getValues(); var filtered = src.filter(function(element, index, array) { return (element[col] === needle); }); if(filtered.length === 0) { spreadsheet.toast(needle + "が見つかりませんでした"); return; } var dst = spreadsheet.getSheetByName(dstSheetName).getRange(range).getValues(); for(var i = 0; i < dst.length; i++) { if(dst[i][col] != needle) { continue; } dst[i] = filtered[0]; } spreadsheet.getSheetByName(dstSheetName).getRange(range).setValues(dst); } ```