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

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

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

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

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

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

Q&A

解決済

1回答

437閲覧

配列を条件分岐で絞りこむ際、特定の文字があれば、、で実装する方法。

ruallout

総合スコア20

Google スプレッドシート

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

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

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

0グッド

0クリップ

投稿2022/12/08 10:31

前提

スプレッドシートから必要な情報だけ取り出して、別のシートに貼り付けるスクリプトをGASで作成中です。
一点追加したい機能があるのですが、コードの書き方がわからずスタックしています。。
GAS初心者ですので、有識者の方、お力添えお願いできれば幸いです。

実現したいこと

①シート1からデータを取得
②日時を指定(例、2022-10-01から2022-10-31)して該当するデータを取得
③取得したデータから条件分岐でさらに絞る
条件1:E列に【P】を含む文字があり⇐★この部分で止まっています。
条件2:かつN列が空白である

④絞り込んだデータをシート2へ転記

発生している問題・エラーメッセージ

const result = []; //フィルタした結果を格納する配列 for (var i = 0; i < array.length; i++) { if (array[i][13] === "") { result.push(array[i]); //上記のコードで条件2はクリアできたのですが、条件1が書き方がわからず叶っていません。。

該当のソースコード

function testDateFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //現在触っているファイルを取得 var sheet = ss.getSheetByName('シート1'); //対象のシート名を選択 var whole_sheet = sheet.getDataRange().getValues(); const array = whole_sheet.filter(function (element) { const day_from = ss.getRange('D1').getValue(); const day_to = ss.getRange('E1').getValue(); day_to.setDate(day_to.getDate()+1); return typeof element[3] == 'object' && element[3].getTime() >= day_from.getTime() && element[3].getTime() < day_to.getTime(); }); const result = []; //フィルタした結果を格納する配列 for (var i = 0; i < array.length; i++) { if (array[i][13] === "") { result.push(array[i]); } } console.log(JSON.stringify(array)); var sheet1 = ss.getSheetByName('シート2'); const lastRow = sheet1.getLastRow(); // 最終行を取得 sheet1.getRange(lastRow+1, 1, result.length, result[0].length).setValues(result); }

試したこと

二次元配列内の要素を検索する方法や比較演算子で出す方法などいろいろ検索しましたが結局求めている答えが見つからず質問した次第です。。
恐れ入りますが、お力添え頂きたく存じます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

特定の文字列を含むかどうかは indexOf で判定できます。
含んでいない場合「-1」が返ってきます。(含んでいる場合は0以上の数値で、先頭からの位置が返ってきます)

js

1const passage = '明日の東京の天気は雨のち曇りでしょう。'; 2const res1 = passage.indexOf('曇り'); 3console.log(res1); // 12=「曇り」の文字が含まれる。(0始まりで先頭から12番目) 4 5const res2 = passage.indexOf('晴れ'); 6console.log(res2); // -1 =「晴れ」の文字が含まれない。

したがって、下記のようにしてみてはいかがでしょうか。

js

1 for (var i = 0; i < array.length; i++) { 2 if (array[i][13] === "" && array[i][4].indexOf('判定したい文字') !==-1) { // N列が空白かつ、E列に判定したい文字が含まれる 3 result.push(array[i]); 4 } 5 }

投稿2022/12/08 12:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ruallout

2022/12/09 07:54

頂いた提案で無事解決することが出来ました! お恥ずかしながら、自分は2日間色々試しても解決できなかったので、とても助かりました。。 ご丁寧に解説までつけて頂いて、感謝です。 ベストアンサーにさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問