Googleスプレッドシートでフィルターで表示された箇所を別シートにコピーしようとしています。
全件シートに全データが入力されていて、当日処理が済んだものを実施日の列に当日日付を入力し、
当日日付でフィルターします。フィルターして表示された分を処理済シートに追加する流れです。
上記の全件シートを実施日でフィルターし、
上記のような状態にし、上記の場合、フィルターされた13行目から16行目を下記の処理済シートに追加します。
まずGASでの処理を2つに分け、
1.(全件シートで)フィルターで表示された部分の取得
2.取得した部分を(処理済シートに)貼付
のうち、1の処理は作成しました。
GAS
1function tuiki1() { 2 var ss = SpreadsheetApp.openById("XXXXX"); 3 var st1 = ss.getSheetByName('全件'); 4 var st2 = ss.getSheetByName('処理済') 5 6 //フィルター表示した部分を別シートにコピーする 7 const range = st1.getRange(3, 1, st1.getLastRow() - 2, 3); 8 const data = range.getValues().filter((v, i) => { 9 if (!st1.isRowHiddenByFilter(i + 3)) { 10 return v 11 } 12 }) 13 console.log(data) 14};
しかし、全件シートのデータの行数が数千行あり、当日日付でフィルターした当日データも数百行あるため、
上記のtuiki1の処理に10分以上かかってしまいます。
https://qiita.com/109s/items/25787fc672c03e42f866
を参考にスピードアップを図れないか試みましたが、
下図のように全件シートの一行目や項目行までコピーされてしまいます。
どのように変更すればよいでしょうか。
よろしくお願いします。
function tenki() { const ss = SpreadsheetApp.openById("XXXXX"); const zenken = ss.getSheetByName('全件'); let lastRow = zenken.getLastRow(); let lastCol = zenken.getLastColumn(); //スプレッドシートのシートをgetSheetByNameで読み込み var shorizumi = ss.getSheetByName("処理済"); //読み込んだシート名が存在するかif文で確認 if (!shorizumi) { ss.insertSheet('処理済'); shorizumi = ss.getSheetByName('処理済'); } let spreadsheetId = ss.getId(); let sheetId = zenken.getSheetId(); // フィルタしたデータを「処理済」シートにペースト let url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/gviz/tq?tqx=out:csv&gid=" + sheetId + "&access_token=" + ScriptApp.getOAuthToken(); // API使用のためのOAuth認証 let res = UrlFetchApp.fetch(url); // HTTPクライアント用のクラス let array = Utilities.parseCsv(res.getContentText()); // CSVテキストを二次元配列で取得 let lastFilterdCol = array[1].length; let lastFilterdRow = array.length; console.log(lastFilterdRow) // 二次元配列arrayを処理済シートに貼り付け let lastrow = shorizumi.getLastRow(); console.log(lastrow); shorizumi.getRange(lastrow+1,1,lastFilterdRow, lastFilterdCol).setValues(array); }
tenki実行した際の処理済シート。全件シートの13行目~16行目だけでなく
見出し行も含めて処理済シートにコピーされる。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/25 02:44