質問: 0; i < columns.length; i++) row.push(e[columns[i]]); return row; }); if (inventory.length) { ss.getRange(ss.getLastRow()+1, 1, inventory.length, inventory[0].length).setValues(inventory); } } ```
回答: 前提として、列の配置は同じと思ってます。 まあ、多分下にあげるような感じだし、この程度なら数分で書けはするけども、使ってるのスプレッドシートですよ? 同じ構造してる(比較したい列が同じ順でなくても、1対1対応する)なら 普通に、シート3の例えばA1には `=IF('シート1'!A1='シート2'!A1, "", 'シート1'!A1)`とかってやれば、違うセルだけ表示されるので、ソートとかフィルタすればいいし、加工したければ値でコピペすればいいし、店舗コードやビジネス名は常に表示するとかも容易に仕様変更できる。何ならA-Zにシート1,AA-AZにシート2をだして、違うセルに条件書式で色をつければ、どのようにかわったかもわかる。これら両方を実行することも容易 確かにセル関数だと列が違ってたとき(A列とF列が対応している)、最初にかきづらいけど、最初だけ。 一行作ればフィルできるし、おそらく何回でも使い回せる(毎回列がかわるデータが得られるとしたら、その運用どうにかしたほうがいい) なんでわざわざ手間をかけて(それも自分の手に負えないから仕様変更で直すことすらできない)同等かもっと不便な結果を得たいのか分からない。 普通にエクセルの勉強したほうがいいと思います。 ``` //動作未検証、無保証で function q189384() { const book = SpreadsheetApp.getActiveSpreadsheet(); const sheet1Dat = book.getSheetByName("sheet1"); //こっちが結果を得たい側(表示させたい側)多分更新後シート const sheet2Dat = book.getSheetByName("sheet2"); const diffs = sheet1Dat.filter(function(e,i) { return e.some(function(f,j){ return f !== sheet2Dat[i][j];}); } ); const sheet3 = book.getSheetByName("sheet3"); sheet3.clear(); if(diffs.length < 1) return; sheet3.getRange(1,1,diffs.length, diffs[0].length).setValues(diffs); } ```