質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
Google スプレッドシート

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

Q&A

解決済

1回答

427閲覧

gasについて詳しい方お力を貸してください。

nocci

総合スコア8

Google スプレッドシート

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

0グッド

1クリップ

投稿2023/05/29 06:04

編集2024/01/30 04:23

gasについて詳しい方お力を貸してください。

現状、下のスクリプトだと挿入先のシート(シート2)にD列からH列が挿入されるようになっているのですが、N列にも挿入したい場合どうしたら良いでしょうか。

どなたかよろしくお願いいたたします。

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

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

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

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

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

YellowGreen

2023/05/29 06:15

1) シート2のN列に挿入したいデータはシート1のどのデータでしょうか? 2) 現在は、シート1のA列からE列までデータのうちシート2のD列からH列と完全に一致するデータは挿入(追加)しないようになっていますが、N列に挿入したいデータも重複しないようにするのであれば、どのように重複の比較をしますか?
nocci

2023/05/29 06:25

ご回答ありがとうございます。 1) シート2のN列に挿入したいデータはシート1のどのデータでしょうか?  →シート1のF列です。 2) 現在は、シート1のA列からE列までデータのうちシート2のD列からH列と完全に一致するデータは挿入(追加)しないようになっていますが、N列に挿入したいデータも重複しないようにするのであれば、どのように重複の比較をしますか? →N列に挿入したいデータは重複の比較対象外にできればと思います。
YellowGreen

2023/05/29 06:31

もうひとつ確認させてください。 今後、シート2に挿入されるシート1のA列からE列までのデータに合わせて同じ行のF列のデータのみをシート2の挿入される行(最終行以降)のN列に挿入するということでよろしいですか?
nocci

2023/05/29 06:35

はい!!仰る通りでございます。
guest

回答1

0

ベストアンサー

そのままシート1のF列のデータを取得してA列-E列のデータをシート2のD列-H列に挿入する際に併せてN列に挿入するようにしたスクリプトの参考例です。
シート1のA列-E列とシート2のD列ーH列とのデータの重複チェックに合格した行のF列のデータがシート2のN列に追加されます。
修正箇所があちこちにわたったので、コードの全文をご提示します。

javascript

1//重複を削除してから挿入(データ追加版) 2function myFunction() { 3 //初期設定 4 const rowBegin = 2;//各シートともに開始行は2行目 5 const colBegin1 = 1;//シート1はA列から抽出 6 const colBegin2 = 4;//シート2はD列から挿入 7 const colCount = 5;//抽出、挿入は5列分 8 const colAdd1 = 6;//シート1の追加データはF列から 9 const colAdd2 = 14;//シート2の追加データはN列へ 10 const ss = SpreadsheetApp.getActiveSpreadsheet(); 11 const sheet1 = ss.getSheetByName('シート1'); 12 const sheet2 = ss.getSheetByName('シート2'); 13 //各シートのデータを取得 14 const lastRow1 = sheet1.getLastRow(); 15 const lastRow2 = sheet2.getLastRow(); 16 const value1 = sheet1.getRange(rowBegin, colBegin1, lastRow1 - rowBegin + 1, colCount).getValues(); 17 const valueAdd1 = sheet1.getRange(rowBegin, colAdd1, lastRow1 - rowBegin + 1, 1).getValues(); 18 const value2 = sheet2.getRange(rowBegin, colBegin2, lastRow2 - rowBegin + 1, colCount).getValues(); 19 //シート1のデータからシート2との重複を削除したデータと追加データを作成 20 const united = []; 21 const add = []; 22 //処理中のデータのインデックスを得るためfor(of)を forEachに変更 23 value1.forEach((item1, i) => { 24 let isSame = false; 25 for (const item2 of value2) { 26 if (item1.toString() == item2.toString()) { 27 isSame = true; 28 break;//一致したら直ちにisSameの真偽判定へ 29 } 30 } 31 if (!isSame) { 32 united.push(item1); 33 add.push(valueAdd1[i]);//便乗して追加データの同じ行の値を配列に加える 34 } 35 }); 36 //シート2の最終行に挿入 37 if (united.length > 0) { 38 sheet2.getRange(lastRow2 + 1, colBegin2, united.length, united[0].length).setValues(united); 39 sheet2.getRange(lastRow2 + 1, colAdd2, add.length, add[0].length).setValues(add); 40 } 41}

投稿2023/05/29 07:14

YellowGreen

総合スコア731

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

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

nocci

2023/05/29 07:33

ありがとうございます!!! 問題なく動きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問