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

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

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

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

Google Apps Script

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

JavaScript

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

Q&A

解決済

1回答

420閲覧

Googleスプレッドシート上の表で、複数条件で指定するデータが何番目にあるか検索する

mbcztpw

総合スコア30

Google スプレッドシート

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

Google Apps Script

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

JavaScript

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

0グッド

1クリップ

投稿2023/02/27 11:34

AB
1支店
2A支店総務課
3A支店営業課
4A支店庶務課
5B支店総務課
6B支店営業課
7B支店庶務課

スプレッドシート上の上記の表から、
支店:B支店、課:庶務課
の条件で探すと7行目にあります。
何行目にあるか見つける処理をGASでするにはどうしたら良いでしょうか。
データを配列に入れ、取り出す処理はできましたが、
何番目のデータであるかをどう取り出せばよいか分かりません。
よろしくお願いします。

GAS

1function fn1(){ 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getSheetByName("シート1"); 4 var data = sheet.getRange(1,1,7,2).getValues(); 5 var select = data.filter(v=> v[0]=="B支店" && v[1]=="庶務課"); 6 console.log(select); 7}

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

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

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

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

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

guest

回答1

0

ベストアンサー

・いずれも、検索対象が複数存在する場合は、最初に見つかった行の行番号のみを返すとします。

① for文を使います。

js

1function fn1() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getSheetByName("シート1"); 4 var data = sheet.getRange(1, 1, 7, 2).getValues(); 5 let row = 0 6 for(; row < data.length; row++) { 7 if (data[row][0] == "B支店" && data[row][1] == "庶務課") { 8 break; 9 } 10 } 11 if (row === data.length) { 12 console.log('見つかりませんでした'); 13 } else { 14 console.log(row + 1); 15 } 16}

② A列とB列の文字列を連結して検索します。行番号をindexOfで返します。

js

1function fn2() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getSheetByName("シート1"); 4 var data = sheet.getRange(1, 1, 7, 2).getValues(); 5 var select = data.map(v => v[0] + v[1]).indexOf("B支店" + "庶務課"); 6 if (select === -1) { 7 console.log('見つかりませんでした'); 8 } else { 9 console.log(select + 1); 10 } 11}

③②だと「B支店/庶務課」と「B/支店庶務課」「「B支/店庶務課」の区別がつかないんじゃ?という疑問をもし持たれる場合は、
map とfilterを使うやり方があります。
(mapで行番号をつけたオブジェクトにしておいて、filterで抽出した後、オブジェクトから行番号を取得する)

js

1function fn3() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getSheetByName("シート1"); 4 var data = sheet.getRange(1, 1, 7, 2).getValues(); 5 var select = data.map((val, idx) => ({ val, idx })).filter(v => v.val[0] == "B支店" && v.val[1] == "庶務課"); 6 if (select.length === 0) { 7 console.log('見つかりませんでした。') 8 } else { 9 console.log(select[0].idx + 1); 10 } 11}

投稿2023/02/27 12:40

編集2023/02/27 13:11
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mbcztpw

2023/02/27 14:16 編集

3つ方法を挙げていただき大変ありがとうございます。 ①基本的な方法を再確認できました。 ②まだ難しく感じるmapの使い方について事例を挙げていただきありがとうございます。 ③filterを使う方法にmapを加えて使うことで必要な値を求める方法大変参考になります。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問