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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

2075閲覧

GASで、文字列の検索ができない。

kou0225

総合スコア9

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2020/10/19 16:56

対象の文字列から、検索したいキーワードがあるかどうかという実装をしているのですが、falseになってしまいます。

セルから値を取得していて、同じキーワードを設定しているためtrueになる想定です。

・ソース
function myFunction() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange('B2:B56');
const range1 = sheet.getRange('D2:D56');
const range2 = sheet.getRange('F2:F56');

range.getValues().flat().forEach(function(key){
range1.getValues().flat().forEach(function(key1){
if(key.match(/key1/)){
Logger.log("true");
}else{
Logger.log("false");

}

});
});
}

また、下記の部分ですが
if(key.match(/key1/)){

if(key.match("/" + key1 + "/")){

上記のようにも試しました。

お手数ですが、ご教授いただきたいです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

key.match(key1)じゃないでしょうか。

key.match(/key1/)

は、正規表現 "key1" (変数Key1の値ではなく、"key1"という文字列)のマッチ結果を返しています。
key が "abckey1def" みたいな文字列ならマッチします。

key.match("/" + key1 + "/")

は、正規表現 "/(key1の値)/" のマッチ結果を返しています。
key が "123/abc/456"、key1 が "abc" のようなケースでマッチします。

投稿2020/10/20 09:22

draq

総合スコア2573

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

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

kou0225

2020/10/20 11:30 編集

ご回答していただきありがとうございます。 今回部分一致で検索したいので、下記を使用しようと思います。 if(key.match("/" + key1 + "/")){} ですが range.getValues().flat().forEach(function(key){ range1.getValues().flat().forEach(function(key1){ if(key.match("/" + key1 + "/")){ Logger.log("true"); }else{ Logger.log("false"); 上記の部分で必ずfalseとなってしまいます。 対象の文字列も検索のワードも、同じ文字列を使用しているのですがうまくいきません。 原因がわからないので教えていただきたいです。 お忙しいところ恐縮ですが、宜しくお願いいたします。
draq

2020/10/20 11:48

なんかいろいろ勘違いされているような気がしますが、key.match(key1) でもkey1次第で部分一致になります。key1="^aaa" の場合は前方一致、key1="aaa$" の場合は後方一致に、key1="^aaa$"の場合は全文一致になります。(フラグによっても変わってきますが) key.match("/" + key1 + "/") の場合は、"/" + key1 + "/" と部分一致するかマッチングしますがそれがやりたいことなんでしょうか。"/" を前後につけることの影響を勘違いしてませんか? ※ /abc/ と "/abc/" は全然意味が違います。前者は正規表現オブジェクト(RegExp)で、後者はただの文字列(String)です。
kou0225

2020/10/21 07:14

申し訳ございません。 勘違いしておりました。 key.match(/key1/) 上記で解決することができました。 知識不足で、質問の質も悪く申し訳ないです。 また、よろしくお願いいたします。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問