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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1876閲覧

GASを使って、別ブックに対してvlookup的な処理をしたい

trcM4

総合スコア1

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/05/27 17:42

編集2020/05/28 08:32

前提・実現したいこと

GASを使って、スプレッドシートAから特定のデータをBに渡すスクリプトを組みたいです。
Aにはマスターデータがあるが、IMPORTRANGE等を使ってBと同一のブックにデータが出ることは避けたいです。

取得方法としては、Bの指定したセルに検索ワードを入れると、A内で検索ワードに一致するセルを探し、該当した行の指定した列のセル内容をBの特定のセルに吐き出したいです。所謂、vlookup的な処理を別のブックを参照して行いたいです。
ネットで調べて、途中までコードは書けたのですが、実行するとnullやfalseが返ってきてしまい、原因がわからず困っています。

GASを学び始めたのが最近で、理解が追いついてない部分があり恐縮ですが、ご教示のほどよろしくお願いいたします。

該当のソースコード

GAS

1function myFunction() { 2 var sh1 = SpreadsheetApp.getActiveSpreadsheet() 3 var sh2 = SpreadsheetApp.openById("sheetID") 4 var sheet1 = sh1.getSheetByName('シート名') 5 var sheet2 = sh2.getSheetByName('シート名') 6 var values = sheet2.getRange('範囲').getValues(); 7 var price = findValue(values, "検索ワード", 指定セルの番号); 8 9 Logger.log(price); 10} 11 12function findValue(values, value, column) { 13 var columnIndex = column - 1; 14 for (var i in values) { 15 if (values[i][0] == value) { 16 return values[i][columnIndex]; 17; 18 } 19 } 20 return false; 21 22} 23

追記

function myFunction() { var sh1 = SpreadsheetApp.getActiveSpreadsheet() var sh2 = SpreadsheetApp.openById("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") var sheet1 = sh1.getSheetByName('アカウント情報') var sheet2 = sh2.getSheetByName('マスターデータ')  var values = sheet2.getRange('B6:G999').getValues(); var cpid = findValue(values, "株式会社〇〇", 7); Logger.log(cpid); } function findValue(values, value, column) { var columnIndex = column - 1; for (var i in values) { if (values[i][0] == value) { return values[i][columnIndex]; Logger.log(i) ; } } return false; }

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードは合ってると思われるので、ちゃんとにシートIDやシート名、指定セルの番号を入れてあげれば動くと思います。

ただ、

Bの指定したセルに検索ワードを入れると、

Bの特定のセルに吐き出したいです。

この部分はコード上に記載がないので、この状態で動かすなら "検索ワード" のところも直接書いてあげる必要があります。

投稿2020/05/28 07:51

sawa

総合スコア3002

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

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

trcM4

2020/05/28 08:03

ご回答ありがとうございます!それぞれに対応するものを入れてみたのですが、Logger.log(price);を実行するとnullが出るんですよね。valuesまでは正しく値を取得できていることは確認できたのですが、、、 参照先のセルの形式などに問題があるんでしょうか…?
sawa

2020/05/28 08:23

シートID以外を公開して問題ない範囲でリアルデータで埋めて、実際のコードに近い状態にしてもらえますか。
trcM4

2020/05/28 08:33

書き換えたもので更新しました。
sawa

2020/05/28 08:43

範囲が B~Gなら 6列なので 7を指定しているのがおかしいです。 ここの column はあくまでも取得した中での何番目の列かなので、G列を参照したいなら 6 としてください。
trcM4

2020/05/28 08:49

そういうことだったのですね!ありがとうございます!!解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問