質問するログイン新規登録
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

362閲覧

GAS スプレッドシート セル挿入して別シートから特定セルのみ値貼付する方法

PandaPanPanPan

総合スコア11

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2023/06/29 06:58

0

1

実現したいこと

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); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YellowGreen

2023/06/29 20:15 編集

> [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列)以降の列は空白でいいのでしょうか?
PandaPanPanPan

2023/06/29 23:48

ありがとうございます。以下、回答させて頂きます。 すいません、B~G列を値貼付したいです。ただし、H~L列は空白列なのでB~L列まで値貼付でも大丈夫です。 M列以降に計算式を入れているのでセルを挿入がいいです。 (もしくはセルの挿入自体をなくして最終行に値貼付でも大丈夫です)
YellowGreen

2023/06/30 00:09

> M列以降に計算式を入れているのでセルを挿入がいいです。 実際に手作業でやるとわかりますが、 行挿入でなくてセルの挿入を行うと計算式の列はそのままなので、計算式が挿入後の下にずれた先のセルを参照することになります。 そのため、挿入前の計算式は挿入してずれた違う行のデータを表示することになりますが、それは想定済でしょうか? 行挿入か、最終行に追記だと計算式の列も空白になりますが、計算式をコピペできるかもしれません。
PandaPanPanPan

2023/06/30 01:19

最終行に追記で解決できました。 ありがとうございます!
guest

回答1

0

自己解決

解決できました!
ありがとうございます。

function copyValues() { var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var range = sheet2.getDataRange(); var values = range.getValues(); for (var i = 0; i < values.length; i++) { if (values[i][0] == "NEW") { var row = findEmptyRow(sheet1); sheet1.getRange(row, 2).setValue(values[i][1]); sheet1.getRange(row, 3).setValue(values[i][2]); sheet1.getRange(row, 4).setValue(values[i][3]); sheet1.getRange(row, 5).setValue(values[i][4]); sheet1.getRange(row, 6).setValue(values[i][5]); sheet1.getRange(row, 11).setValue(values[i][6]); } } } function findEmptyRow(sheet) { var range = sheet.getRange("F:F"); var values = range.getValues(); for (var i = 0; i < values.length; i++) { if (values[i][0] == "") { return i + 1; } } return sheet.getLastRow() + 1; }

投稿2023/06/30 01:18

PandaPanPanPan

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問