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

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

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

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

Q&A

解決済

1回答

1100閲覧

二次元配列の要素をGet row → set value で別シートに取りたい

Gra_ntz

総合スコア4

Google Apps Script

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

0グッド

1クリップ

投稿2021/02/04 06:45

編集2021/02/05 08:22

はじめまして、GAS初心者の者です。業務にGASを使ってスプレッドシートの
運用を効率化させたいと思っています。

質問の具体的な内容としては写真1(食べ物リスト)のようなリストの
内容をGetRANGEで二次元配列で取り、写真2(全情報)のカラムAの内容と合致する
ものにBの内容(色)を書き込みたいと思っております。

写真1
写真2

コードは何となくFor文で[i]に配列の要素を一つずつ入れて
全情報のシートを指定して、Get_rowでrowを特定してから
一つずつSetvalueしていこうと考えています。
ただ食べ物リストのA~Bを配列にしたときBの値だけをうまく
抜き出す事が出来ません。

どなたか二次元配列でBの部分だけとるやり方を教えて
いただけませんでしょうか。

恥ずかしながらコードを途中まで書いたのですが、
変数「tabeMono」で取得する値を色だけにしたいと思っております。
また色の値だけを取ってからの命令文(下記コードのLogger.log以下)
についてもアドバイスを頂けましたら幸いです。
なにとぞ宜しくお願いいたします。

google

1function input_value(){ 2var mySS=SpreadsheetApp.getActiveSpreadsheet() 3var sh = mySS.getSheetByName("食べ物リスト"); 4var sh2 = mySS.getSheetByName("全情報"); 5var tabeMono = sh.getRange("A2:B"+ sh.getLastRow()).getValues(); 6var col = "A" 7for (var i = 0; i < tabeMono.length; i++) { 8Logger.log(tabeMono[i]); 9}

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

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

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

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

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

sawa

2021/02/05 01:34

途中まででもよいのでコード書いて、ここまでは理解できるというのを示した方が回答つくと思います。 掲載されてることを実現したいだけなら、VLOOKUPなどの関数を使っても実現できます。
Gra_ntz

2021/02/05 08:14

コメントいただきありがとうございます。またご指摘いただきありがとうございました。 早速、質問を編集しなおします。行き詰ってしまって何を書いたら良いかわからなくて文章だけになったおりました。「食べ物リスト」のパラメータが変わったりするので変数にしようかと思っております。
papinianus

2021/02/06 01:47

> どなたか二次元配列でBの部分だけとるやり方を教えて いただけませんでしょうか。 > また色の値だけを取ってからの命令文(下記コードのLogger.log以下) 色だけをとってからではそれが何の色なのかはわからないので、野菜と色のペアとして取得しているtabemonoは正しいことをしていると思います。 足りてないのは埋めるべき表と辞書を二重ループする処理だと思います。 vlookupだとソート済であることが要求されないですかね?
sawa

2021/02/06 12:20

papinianusさんが回答されて解決済みとなったので、今更ですがご質問の >Bの部分だけとる については質問のコードであれば、 Logger.log(tabeMono[i]); を Logger.log(tabeMono[i][1]); としてあげると B列の値だけ出力されます。 papinianusさんのMapを使った方法が一番スマートだと思いますが、最初のうちはコード読み解くの難しいと思いますので、いろいろな方法を試しつつスキルアップを目指されるとよいかと。 ちなみにvlookup は 4番目の引数をFALSEを指定してあげれば、ソート済みでなくても大丈夫です。https://support.google.com/docs/answer/3093318?hl=ja
guest

回答1

0

ベストアンサー

javascript

1const q320434 = () => { 2 const DictSheetName = ""; 3 const TargetSheetName = ""; 4 5 const book = SpreadsheetApp.getActive(); 6 const dictionary = new Map(book.getSheetByName(DictSheetName).getDataRange().getValues().map(e=>e.slice(0,2))); 7 const targetSheet = book.getSheetByName(TargetSheetName); 8 9 const data = targetSheet.getDataRange().getValues().map(e=>[e[0],e[1]!==""?e[1]:(dictionary.has(e[0])?dictionary.get(e[0]):""),...e.slice(2)]); 10 targetSheet.getRange(1,1,data.length,data[0].length).setValues(data); 11}

投稿2021/02/05 08:26

papinianus

総合スコア12705

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

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

Gra_ntz

2021/02/06 02:01

回答を頂きましてありがとうございました。 頂いたScriptを実装し、sheetの名前をそれぞれ書き込んだところ 問題なく転記する事が出来ました。 私の知らない関数がたくさんあるので、一つ一つ勉強していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問