前回
Googleシート YouTubeの関連動画を表示させない方法
NGワードを見つける
複数のNGワードを 見つける
- セル内に含まれるNGワードを判別できるようになります。
- GASのカスタム関数の効果的な使い方がわかります。
- 特定のシートから値を読み込むことができます。
ご質問
S T チャンネル登録期間: 3 週間 • 8 時間前 こんにちは。以下を実現するために最もシンプルな関数を作りたいのですがどうすればいいでしょうか? ・あるセルの文章の中に特定の文字列が含まれる場合、“NGワード”とすぐ近くの別のセルに返したい。 ・特定の文字列というのは、1つではなく多数あります。できればリストを参照する形にしたいです。 例) 特定のワードリスト:○にたい、○ぬ、辛い A1セルの文章:毎晩私は○にたいと思う A2セルの文章:たかしくんは楽しい ⇓ この場合、A1セルにはNGワードリストにある「○にたい」が含まれている判定となるので、どこかのセルに「NGワードあり」といった感じで何か値を返したいです。 A2セルには含まれていないので、NAなどを返したいです。 COUNTIFSでちょっと頑張ろうとしたのですが、文字列を関数内に””で囲って繰り返し並べる長い数式になってしまい、もう少しスプレッドシートで効率的にできないかと思った次第です。 宜しくお願い致します。
動画はこちら
スクリプト
/** * NGワードが含まれているかチェックする。 * 「NGワード」シートにあるNGワードが含まれているかチェックする。 * @param {string} word チェックする文字列。 * @return {boolen} true:NGワードあり false:NGワードなし * @customfunction */ function JUDGNGWORD( word ) { var app = SpreadsheetApp; var ss = app.getActiveSpreadsheet().getSheetByName("NGワード"); var lr = ss.getLastRow(); for( var i=2 ; i <= lr ;i++){ var ckword = ss.getRange(i, 1).getValue(); if(word.indexOf(ckword) >= 0 ){ return(true);//NGワードが見つかった } } return(false);//NGワードなし }
さらに
NGワードを表示させる
上記動画に対してご質問をいただきました。
というわけでやっていきます。
シート
スクリプト
/** * NGワードが含まれているかチェックする。 * 「NGワード」シートにあるNGワードが含まれているかチェックする。 * @param {string} word チェックする文字列。 * @return {number} number:NGワードの位置(行) false:NGワードなし * @customfunction */ function JUDGENGWORD( word ) { var app = SpreadsheetApp; var ss = app.getActiveSpreadsheet().getSheetByName("NGワード"); var lr = ss.getLastRow(); for( var i=2 ; i <= lr ;i++){ var ckword = ss.getRange(i, 1).getValue(); if(word.indexOf(ckword) >= 0 ){ // return(true);//NGワードが見つかった return(i);//NGワードが見つかった行 } } return(false);//NGワードなし } function testJUDENGWORD(){ var ret = JUDGENGWORD("▲") console.log(ret) }
さらに、さらに
NGワードを一気に読み込む
- セルの値を一気に読み込んで処理する方法がわかります。
- 一気に読み込むので処理速度が速くなります。
スクリプト
function JudgeNGWord(word) { const NGWORDSHEET = "NGワード" const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(NGWORDSHEET) const lr = ss.getLastRow() //NGワードの最下行 console.log(lr) let NgBuff = ss.getRange(2, 1, lr - 1).getValues() for (let i = 0; i < lr - 1; i++) { let ckword = NgBuff[i][0] console.log(ckword) if (word.indexOf(ckword) >= 0) { // return(true);//NGワードが見つかった return (ckword);//NGワードが見つかった行 } } return (false);//NGワードなし } function test_JudgeNGWord() { console.log(JudgeNGWord("〇〇")) }
動画はこちら
さらにさらに。。。
引数を一気に渡し一気に取得
- 関数の引数をまとめて渡す方法およびまとめて返す方法がわかります。
- 2重ループの行い方がわかります。
動画はこちら
スクリプト
function JudgeNGWordRange(words) { let retbuf = [] const NGWORDSHEET = "NGワード" const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(NGWORDSHEET) const lr = ss.getLastRow() //NGワードの最下行 let NgBuff = ss.getRange(2, 1, lr - 1).getValues() for (let s = 0; s < words.length; s++) { //チェックする文字列のループ let word = words[s][0] //チェックする文字列 let bNG = false // true:NGワードが見つかった for (let i = 0; i < lr - 1; i++) { let ckword = NgBuff[i][0] if (word.indexOf(ckword) >= 0) { //NGワードが見つかった bNG = true retbuf.push(ckword) break } } if (!bNG)//NGワードが見つからなかったら retbuf.push(false) } return (retbuf) }
以上です。
最後までご覧いただきありがとうございます。
つぎはこちら
Googleシート 複数のNGワードを的確に抽出する方法