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

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

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

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

Q&A

解決済

1回答

2429閲覧

同じ文字列を検索して隣のセルの値を返す

yoyoy

総合スコア14

Google Apps Script

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

0グッド

0クリップ

投稿2020/07/06 03:37

GoogleAppScriptで、同じ文字列を検索して、隣のセルにあるメールアドレスをメールの受信者へ設定をするよう、設定を行いたいと考えています。

シート1
イメージ説明

シート2
イメージ説明

以下の以前の投稿を参考にし、scriptを作成してみたのですが、11行目でエラーが出てしまいます。
参考にしたscrit・・・https://teratail.com/questions/135506

v8で実行しているため、foreachは変更をしています。

function

1 2var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 4 // 一覧を連想配列化 5 var sheet1 = ss.getSheetByName('シート2'); 6 var kvRow = 2; // 開始する行数を定義(ヘッダは省く) 7 8 var keyColumn = 1; // キーの列を定義 9 var valueColumn = 2; // 値の列を定義(ただしキー列<値列) 10 var kvData = sheet1.getRange(kvRow, keyColumn, sheet1.getLastRow(), valueColumn).getValues(); 11 var kvDic = {}; 12 13 kvData.foreach(function(kvData) { 14 kvDic[kv[keyColumn - 1]] = kv[valueColumn - 1]; 15 }); 16 17 // 値をセットする 18 var sheet2 = ss.getSheetByName('シート1'); 19 20 var startRow = 1; // 開始する行数を定義(ヘッダは省く) 21 var targetColumn = 6; // キーになるコードの列を指定 22 var targetData = sheet2.getRange(startRow, targetColumn, sheet2.getLastRow(), 1).getValues(); 23 24 var setData = []; 25 26 targetData.foreach(function(targetData) { 27 setData.push([kvDic[targetRow[0]]]); 28 }); 29 Logger.log(setData); 30 var setColumn = 17; // 挿入したい列数 31 sheet2.getRange(startRow, setColumn, sheet2.getLastRow(), 1).setValues(setData); 32} 33

エラーの原因、または、別のscriptなどがありましたらご教授お願いいたします。

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

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

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

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

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

draq

2020/07/06 04:21

どんなエラーが出ているのか、エラーメッセージも書いてください。
yoyoy

2020/07/06 05:28

エラーは「TypeError: Cannot read property 'getRange' of null(行 11、ファイル「メールアドレス」)」と出ます。 シート名を再度、コピーしてscriptに張り付けをしたところ、動くようになりました。 また、確認ありがとうございました。 大変助かりました。 現在scriptが動くこと確認しております。
guest

回答1

0

ベストアンサー

ぱっと見ただけですが、以下の2箇所がおかしいです。

JavaScript

1 //kvData.foreach(function(kvData) { 2 kvData.forEach(function(kv) { 3 kvDic[kv[keyColumn - 1]] = kv[valueColumn - 1]; 4 }); 5 6 //(中略) 7 8 //targetData.foreach(function(targetData) { 9 targetData.forEach(function(targetRow) { 10 setData.push([kvDic[targetRow[0]]]); 11 });

別の方法として、スプレッドシート関数のARRAYFORMULAVLOOKUPを使うことでGASのコードなしでも実現できます。

  • ARRAYFORMULA

https://support.google.com/docs/answer/3093275?hl=ja

  • VLOOKUP

https://support.google.com/docs/answer/3093318?hl=ja

Q3 セルに以下を指定することで Q4 以降のセルも自動的にメールアドレスが設定されます。

=arrayformula(iferror(vlookup($F3:$F, 'シート2'!$A$2:$B,2,false),""))

投稿2020/07/06 04:46

draq

総合スコア2573

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問