teratail header banner
teratail header banner
質問するログイン新規登録
Google スプレッドシート

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

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

410閲覧

Google Apps Script:配列を使用した文字列の検索とifの判定

teratail_555

総合スコア0

Google スプレッドシート

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

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

2クリップ

投稿2022/08/19 07:16

編集2022/08/19 12:10

0

2

実現したいこと

配列に特定の文字列(氏名)があった場合は誕生日を取得したいです。

search1Arrayには色んな情報が含まれてますが、そこにname(氏名)が含まれているか確認をしたいです。
ifが正常に判定できないのか、何度やってもTRUEになってしまいます。

何が原因かご教授いただけないでしょうか。

該当のソースコード

GAS

1// 配列での文字列検索 2if(search1Array.indexOf(name) === -1){ 3 4 //含まれない場合はログの表示のみ 5 Logger.log("氏名:" + name); 6 7}else{ 8 9 //含まれる場合はB列から誕生日を取得 10 search2Array.push([day]); 11 Logger.log("誕生日:" + day); 12 13}

配列について追記

var spreadsheet = SpreadsheetApp.getActive(); var sheet = spreadsheet.getSheetByName("sheet1"); var val = sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()).getValues(); var fullname; var date; var search1Array = [[],[]]; for(i=1; i<val.length; i++){ fullname = val[i][0]; date = val[i][1]; search1Array.push([name,date]); }

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

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

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

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

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

RiaFeed

2022/08/19 11:05

もしかして二次元配列になってるとかありそう
CHERRY

2022/08/19 11:41 編集

search1Array は、どのように値を読み込み等していますか?
teratail_555

2022/08/19 12:08

RiaFeedさん 追記しましたが、この書き方だと二次元配列だったでしょうか?。。。 初心者なので配列をまだあまり分かっておらずご教授いただければ幸いです。 CHERRYさん 追記しましたのでご確認していただけますでしょうか。 また変数が多いため2つのみ記載させていただきました。
guest

回答1

0

ツッコミどころとしては、

javascript:searchArrayの入れ方

1for(i=1; i<val.length; i++){ 2 fullname = val[i][0]; 3 date = val[i][1]; 4 search1Array.push([name,date]); 5}

記載しているスクリプトの通りに代入すると結果としては下記のようになります

result

1console.log(searchArray); 2> [[name1,date1],[name2,date2],[name3,date3]]

この形式になるのは理解していましたか?

この状態からデータの検索をする場合、方法はいくつかありますが、
今回はfindを使いましょう

javascript

1// 見つかっていたら該当の配列が入っており、見つからなければundefinedになる 2searchArray.find(arr=>{ 3 // arrの中は各配列が入っている 4 // 1回目-> [name1,date1] 5 // 2回目-> [name2,date2] 6 // 3回目-> [name3,date3] 7 return name === arr[0] 8})

という形になります。
ちなみにもう少し簡単な方法の一つとして、

javascript

1// [name1,name2,name3]の状態に成形する 2const nameArray = searchArray.map(arr=>arr[0]) 3// nameと一致していればtrue,不一致ならfalse 4nameArray.contains(name) 5 6//一行で書くと 7if(searchArray.map(arr=>arr[0]).contains(name)){ 8 console.log(`${name}が見つかった`); 9}

投稿2022/08/31 06:46

sk-sora--ypi

総合スコア535

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問