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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

248閲覧

セル内のキーワードが別セルに含まれているかどうかを判別して、含まれていないものは記述する方法はありませんか?

tttyyy

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/06/19 06:23

GASにおいて、以下のような条件のセルの内容が別のセルに含まれているかどうかを判別し、含まれていない内容を別のセルに記述することは可能でしょうか。

例:
A1:カナダ アメリカ 中国
A2:アメリカとドイツは友好国だ

結果の例:
A3:カナダ 中国

背景:
A1内のキーワードはスペースで区切っており(,で区切っても良いです。)それぞれのキーワードがA2に含まれているかどうかを知りたいです。

例だとA2に「アメリカ」は含まれていますが、「カナダ」と「中国」は含まれていないのでA3に「カナダ 中国」が記述される形です。

初心者なので検討が全くつかないため、ご指導いただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

セルから値を取得する方法
https://uxmilk.jp/25841

任意の文字列を区切る方法
https://auto-worker.com/blog/?p=898

任意の文字列が含まれているか確認する方法
https://vba-gas.info/gas-match

どのようなコードを書いているか不明なので
ネット検索し、実現できそうな記事を書いておきます。

それと、参考のコードも記載しておきます。

gs

1function getKeyword() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); //このスプレッドシート 3 var skSheet = ss.getSheetByName("main"); //使用するシート 4 var skEndRow = skSheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 5 6 for (var i = 2; i <= skEndRow; i++) { 7 var strkeyword = skSheet.getRange(i, 1).getValue(); // 調べたいキーワード 8 var strsubject = skSheet.getRange(i, 2).getValue(); // 調べる対象の文章 9 10 // こちらは削除 11 // let missing = strkeyword.split(",").map((e) => { 12 // if (strsubject.match(e) === null) return e 13 // }) 14 15 // 調べる対象に含まれていないキーワードの配列 16 let missing = strkeyword.split(",").filter((e) => { 17 if (strsubject.match(e) == null) return e 18 }) 19 20 console.log(missing) 21 22 skSheet.getRange(i, 3).setValue(missing.join(",")); 23 } 24}

consoleログ

1[ 'カナダ', '中国' ]

投稿2022/06/19 06:55

編集2022/06/19 09:41
k.a_teratail

総合スコア845

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

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

tttyyy

2022/06/19 08:36

セルをA1,A2,A3としていましたが、A2,B2,C2を使用することにし、 以下のようなコードを書いたのですが、「カナダ 中国」ではなく、「カナダ」だけ記述されました。原因等もしご存知でしたら教えていただけないでしょうか? function getKeyword() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //このスプレッドシート var skSheet = ss.getSheetByName("main"); //使用するシート var skEndRow = skSheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得      for (var i = 2; i <= skEndRow; i++) { var strkeyword = skSheet.getRange(i, 1).getValue(); // 調べたいキーワード var strsubject = skSheet.getRange(i, 2).getValue(); // 調べる対象の文章 let missing = strkeyword.split(",").map((e) => { if (strsubject.match(e) == null) return e }) skSheet.getRange(i, 3).setValue(missing); } }
tttyyy

2022/06/19 08:42

失礼しました。以下のコードに修正したところ中国でも出るようになったのですが、「カナダ,,中国」といった形で「,」が一個多い形で出力されてしまいます。修正する方法はありますでしょうか? function getKeyword() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //このスプレッドシート var skSheet = ss.getSheetByName("main"); //使用するシート var skEndRow = skSheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得      for (var i = 2; i <= skEndRow; i++) { var strkeyword = skSheet.getRange(i, 1).getValue(); // 調べたいキーワード var strsubject = skSheet.getRange(i, 2).getValue(); // 調べる対象の文章 let missing = strkeyword.split(",").map((e) => { if (strsubject.match(e) == null) return e }) skSheet.getRange(i, 3).setValue(missing.join(",")); } }
k.a_teratail

2022/06/19 09:42 編集

原因がわかりました。 mapメソッドを使用した際は、配列内の全ての要素を返すので 調べたいキーワードに一致した場合、returnで何も返さずになっていたので「undefined」となっていました。 missing の中身:[ 'カナダ', undefined, '中国' ] これをjoinで結合した際、何も値が無いとなり、「カナダ,,中国」となっていました。 一致しないものを配列化するには、filterメソッドを使用する必要があります。 回答の方、修正しておきます。
tttyyy

2022/06/19 10:51

ありがとうございます!!非常に助かりました!丁寧なご説明もありがとうございます。今後の勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問