大量データに対するテストはやっていませんがGASのコードだけでということになるとこんな感じになりました。
最後、setValues()でシートに転記していますが、forで回しながら1行ずつsetValue()すると重くなるためです。ただこれでもあまりパフォーマンスはそれほど良くはないと予想しますがご参考までに。。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh_A = ss.getSheetByName("Aさん");
var sh_Main = ss.getSheetByName("データ格納用");
function test() {
// Aさん
var lr = sh_A.getLastRow();
var ary = sh_A.getRange(4,2,lr-3,sh_A.getLastColumn()-1).getValues();
// データ格納用
var lr2 = sh_Main.getLastRow();
var ary2 = sh_Main.getRange(4,2,lr2-3,sh_Main.getLastColumn()-1).getValues();
// 空配列用意
var ary3 = [];
// 照合
for (var i=0; i<ary2.length; i++) {
// 結果初期値
var flg = "false";
for (var j=0; j<ary.length; j++) {
// 一致が見つかった場合
if (ary2[i][0]+"|"+ary2[i][1]+"|"+ary2[i][2] == ary[j][0]+"|"+ary[j][1]+"|"+ary[j][2]) {
// Aさんの値を格納
ary3.push([ary[j][3],ary[j][4],ary[j][5],ary[j][6],ary[j][7],ary[j][8],ary[j][9],ary[j][10],ary[j][11]]);
// 結果を変更
flg = true;
}
}
// 一致が見つからなかった場合
if (flg == "false") {
// 現状の値を格納
ary3.push([ary2[i][3],ary2[i][4],ary2[i][5],ary2[i][6],ary2[i][7],ary2[i][8],ary2[i][9],ary2[i][10],ary2[i][11]]);
}
}
// シートに反映
sh_Main.getRange(4,5,ary3.length,ary3[0].length).setValues(ary3);
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/09 16:27