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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Google Apps Script

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

Q&A

解決済

1回答

1413閲覧

GoogleAppsScriptを用いて、あるシートの情報を別シートに定期的に転載する方法を教えてください

abekei0317

総合スコア10

Google Apps Script

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

0グッド

1クリップ

投稿2016/10/09 11:14

編集2016/10/09 11:15

###前提・実現したいこと

  • 添付の画像1「Aさん」シートのE列~M列の情報を、画像2「データ格納用」シートの「ID/クライアント名/ブランチ名」が一致する行にデータを転載したいです
  • 実施後は、画像3「アウトプットイメージ」の状態にしたいです
  • 「Aさん」シートのE列~M列の情報を取得するのは、 getRangegetValues で行うイメージがありますが、「データ格納用」シートの「ID/クライアント名/ブランチ名」が一致する行にデータを出力する書き方がわかっておりません
  • VLOOKUP関数等で、「データ格納用シート」に持ってくる運用だととても重くなってしまうため、GASでなんとかできないかと考えております
  • どのようにコードを書くか、ご存知の方がいらっしゃいましたら教えていただきたいです

※画像1(「Aさん」シート)
イメージ説明

※画像2(「データ格納用」シート)
イメージ説明

※画像3(アウトプットイメージ)
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

大量データに対するテストはやっていませんが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:19

true

総合スコア440

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

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

true

2016/10/09 16:27

「定期的に」ということですが、スクリプトエディタ上から「リソース」→「現在のプロジェクトトリガー」から設定してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問