実現したいこと
Googleスプレッドシートで顧客リストを管理しています。
毎週新規顧客が追加されてくるので、自動でコピーできるGASを組みたいとおもっております。
- [1] sheet1には既存の顧客リストがあり、sheet2には毎週更新されるリストがあります。
- [2] sheet2のA列に新規顧客のみ「NEW」フラグがつきます。
- [3] sheet1のA5からL5の上にセルを挿入して、sheet2のA列に「NEW」が入っているもののみB列~F列をコピーしてSheet1のB5からL5に値貼付をしたいと考えております。
発生している問題・エラーメッセージ
以下コードを入れたところ、sheet1のB列の前に5行挿入されてしまいうまく実装できませんでした。
該当のソースコード
function insertCellsAndCopyColumnsWithMarker() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet1 = ss.getSheetByName("Sheet1"); // 貼り付け先のシート名を入力してください var sheet2 = ss.getSheetByName("Sheet2"); // コピー元のシート名を入力してください var marker = "NEW"; // コピーする行にマーカーとして使う文字列を入力してください sheet1.insertRowsAfter(4, 1); sheet1.insertColumnsBefore(1, 11); sheet1.getRange("A:L").copyTo(sheet1.getRange("B:L"), {contentsOnly:true}); var data = sheet2.getDataRange().getValues(); var newData = []; for (var i = 0; i < data.length; i++) { if (data[i][0] == marker) { newData.push(data[i].slice(1, 6)); } } sheet1.getRange("B5:F5").setValues(newData); }
> [3] sheet1のA5からL5の上にセルを挿入して、sheet2のA列に「NEW」が入っているもののみB列~F列をコピーしてSheet1のB5からL5に値貼付をしたいと考えております。
ということですが、
1)B列からF列をB5からF5(L5ではなく)に値を貼り付けるのではないですか?
2)sheet1のA5からL5の上に「セルを挿入」するのではなくて、5行目以降に「行を挿入」してから値を貼り付けするとまずいのでしょうか?
3)A列からF列(またはL列)を貼り付け後は、G列(またはM列)以降の列は空白でいいのでしょうか?
ありがとうございます。以下、回答させて頂きます。
すいません、B~G列を値貼付したいです。ただし、H~L列は空白列なのでB~L列まで値貼付でも大丈夫です。
M列以降に計算式を入れているのでセルを挿入がいいです。
(もしくはセルの挿入自体をなくして最終行に値貼付でも大丈夫です)
> M列以降に計算式を入れているのでセルを挿入がいいです。
実際に手作業でやるとわかりますが、
行挿入でなくてセルの挿入を行うと計算式の列はそのままなので、計算式が挿入後の下にずれた先のセルを参照することになります。
そのため、挿入前の計算式は挿入してずれた違う行のデータを表示することになりますが、それは想定済でしょうか?
行挿入か、最終行に追記だと計算式の列も空白になりますが、計算式をコピペできるかもしれません。
最終行に追記で解決できました。
ありがとうございます!

回答1件
あなたの回答
tips
プレビュー