前提
GASで、検索条件に該当するものを別シートに書き写すスクリプトを書いています
実現したいこと
①シート2のG列と、シート1のA列(管理Key)、もしくはC列(ID)にある単語が一致していた場合、
シート1のB列(名称)をシート2のA列に書き写したいです
発生している問題・エラーメッセージ
だいたいは実現しているんですが、
配列にある要素を上限として、シート2のA列が埋められないです。
上記画像でいうと、シート1にある2行目~10行目までの要素9個分までは、
シート2のA9までは記載ができるのですが、A10以降は埋めることができません。
該当のソースコード
function Keysheet() { // 対象のスプレッドシートを指定 var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('シート2'); //コピー先のスプレッドシートID(CopyDB) var SS_CopyFrom = SpreadsheetApp.openById("URL"); var copydb_sheet = SS_CopyFrom.getSheetByName('シート1'); var lastRow = copydb_sheet.getLastRow() var matchArray = []; //一致する値を格納する配列 //B,一致する値を配列に格納 for (var i = 1; i <= lastRow; i++) { var kanrikey = copydb_sheet.getRange("A" + i).getValue(); var idkey = copydb_sheet.getRange("C" + i).getValue(); var name = sheet.getRange("G" + i).getValue(); if (name === kanrikey || name === idkey) { var listEach = copydb_sheet.getRange("B" + i).getValues(); matchArray.push(listEach); // 最終行に追加したい // var data3 = sheet.getRange("G2:G").getValues(); // var lastRow2 = data3.filter(String).length; //C,シートに一致したデータを入力 var matchArrayLen = matchArray.length; for (var y = 2,i = 1; i < matchArrayLen; y++,i++) { //試したがだめでした。 //for (var y = 2,i = 1; i < matchArrayLen; y++,i++) { sheet.getRange(y, 1).setValue(matchArray[i]); } } } }
試したこと
配列の個数が上限になっているので、最終行までを上限にして試したのですが、うまく動きません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
なぜ条件にあっているものを見つけるループの中に条件に合ったものが格納されている配列を書き出すループがあるのでしょうか?
また、外側のループで使用しているiが内側のループでも使用されていますが、iの値がどのように変化しているのか確認されたのでしょうか?
回答1件
あなたの回答
tips
プレビュー