お仕事おつにゃッス🐈文系未経験から社内SEになった、あっきょ(@daily_code_JP)です!
今回はGoogle Apps Scriptで文字列を検索する方法を紹介します。
こんな人におすすめ!
- 膨大なリストからデータを検索する手間を省きたい
- 完全一致じゃなく部分一致の検索機能を実装したい
- プログラミングでJavaScriptを学んだけど、何を作っていいかわからない
JavaScript のとあるコードを使うだけで簡単に検索機能を作れます。
コピペOKなので気軽に学んでいきましょう。
文字列を検索する完成イメージ
GASで部分一致の検索機能を作成します。
この記事では、同じコードを使って以下の2つの方法を紹介。
- 一致するものを1つだけ取得する方法(完全一致)
- 一致するものはすべて取得する方法(部分一致)
結果として、人的ミスと検索時間の削減して業務効率化を実現します。
膨大なデータを管理するなら絶対に役に立つッスよ!
文字列を検索する準備
Google Apps Script で文字をあいまい検索する準備をします。
準備するファイルは1つです。
必要なファイル
- Google スプレッドシート…コードの貼り付け&リストの作成
スプレッドシートの作成
この記事では
- 氏名
- 性別
- 年齢
の3項目を追加
2行目から11行目までに個人のデータをそれぞれ記入していきます。
スプレッドシートの準備は以上です。
サンプルコードを貼り付ける場所
サンプルコードはGoogle スプレッドシートにコピペ。
上バーの「拡張機能」の中にある「Apps Script」をクリックしてコードを貼り付けます。
文字列を検索するサンプルコード
GASで文字列を検索するサンプルコードの公開と解説を行います。
解説の項目
- indexOfメソッド | 指定した文字列を検索
- サンプルコード
- A, 検索ワード記入
- B, スプレッドシートの情報を取得
- C, 配列内の要素を1つずつ取得して一致するか検証
indexOfメソッド | 指定した文字列を検索
GASで文字列を検索するにはindexOfメソッドを使います。
引数の中に文字列を入力するだけで一致する文字があるかどうかを検索。
文字列内で一致する値が1つもなければ「-1」を返します。
サンプルコード
右上にあるマークを押すとコードのコピペを一瞬でできます。
また、コード内で文頭にアルファベットが付いているコメントごとに詳細を説明していきます。
function searchWord(){
//A,検索ワード記入
const searchWord = "宇佐見"; //検索する言葉
//B,スプレッドシートの情報を取得
const sheet = SpreadsheetApp.getActiveSpreadsheet();
const nameArray = sheet.getRange("A2:A11").getValues().flat(); //二次元配列を一次元化
const nameArrayLen = nameArray.length; //配列の長さを取得
//C,配列内の要素を1つずつ取得し、一致するか検証
for(var i=0; i<nameArrayLen; i++){
const isExisted = nameArray[i].indexOf(searchWord);
if(isExisted != -1){
Logger.log(nameArray[i]); //定数searchWordの値を含む要素をログ出力
}
}
}
A, 検索ワード記入
//A,検索ワード記入
const searchWord = "宇佐見"; //検索する言葉
検索する言葉を定数searchWordに代入。
この例では「宇佐見」を使っていますが、どの単語でも問題ありません。
B, スプレッドシートの情報を取得
//B,スプレッドシートの情報を取得
const sheet = SpreadsheetApp.getActiveSpreadsheet();
const nameArray = sheet.getRange("A2:A11").getValues().flat(); //二次元配列を一次元化
const nameArrayLen = nameArray.length; //配列の長さを取得
検索するスプレッドシートを取得。
A2からA11までの値を取得して二次元配列を一次元化した後、配列内の要素数をかぞえます。
二次元配列を一次元化するflatメソッドの詳細はこちらから。
C, 配列内の要素を1つずつ取得して一致するか検証
//C,配列内の要素を1つずつ取得し、一致するか検証
for(var i=0; i<nameArrayLen; i++){
const isExisted = nameArray[i].indexOf(searchWord);
if(isExisted != -1){
Logger.log(nameArray[i]); //定数searchWordの値を含む要素をログ出力
}
}
繰り返し構文でnameArray内の要素を1つずつ取り出して照合します。
indexOfメソッドで引数内の値と一致する配列の要素を検索。
いいかえると、配列内の要素とsearchWordの値が一致すれば検索結果として反映します。
返り値が「-1」 以外の値なら検索結果をログ出力します。
コードの説明は以上です。
検索するコードのテスト
実際にスプレッドシートで文字列を検索します。
Apps Scriptの上バーの文字が「searchWord」になっていたら「実行」を押します。
「このアプリはGoogleで確認されていません」と表示した場合はこちら。
画像のようにログ結果がでたら完了です。
「宇佐見」に一致する名前が結果として表示されました。
【応用】複数の検索結果を出力するコード
先ほど紹介したサンプルコードは一致する値を検索するだけの機能しかありませんでした。
しかし、配列を新たに作成すると一致した値をすべて取得できます。
サンプルコード
検索するワードは「山」に変更しています。
先ほどのサンプルコードとほぼ同じですが2か所異なります。
- 一致した値を格納するhitArray配列を定義
- 一致した値を配列に格納する処理を追加
function searchWords(){
//A,変更可能エリア
const searchWord = "山"; //検索するワード
//B,スプレッドシートの情報を取得
const sheet = SpreadsheetApp.getActiveSpreadsheet();
const nameArray = sheet.getRange("A2:A11").getValues().flat(); //二次元配列を一次元化
const nameArrayLen = nameArray.length;
const hitArray = []; //ヒットしたワードを格納
//C,配列内の要素を1つずつ取得し、一致するか検証
for(var i=0; i<nameArrayLen; i++){
const isExisted = nameArray[i].indexOf(searchWord);
if(isExisted != -1){
hitArray.push(nameArray[i]); //一致する値があったら、配列に格納
}
}
Logger.log(hitArray);
}
画像のようにログ結果がでたら完了です。
名前に「山」が含まれる値のみを格納しました。
おわりに | GASのスキルを磨いて残業を減らそう!
以上、Google Apps Script を使った文字列を検索する2つのサンプルコードでした。
そのままコピペしたり、プログラミングの練習や動作確認用に使ったりしてみましょう。
GASのスキルを磨いて残業を減らすなら日々の学習と実際にアプリ開発してみるのが必須。
GASを効率的に学ぶなら以下の2つの方法が多いです。
- 参考書やオンライン教材で独学
- プログラミングスクールを利用
正しく学ぶことで非エンジニアでも実用的な業務効率化のスキルが身に付きます。
デイコーでは、GASのサンプルコードからおすすめのプログラミングまで幅広く紹介。
初心者にもわかりやすく解説しています。
プログラミングスクールは82社を分析したッス!
次回の記事もご期待ください!
それでは、よいプログラミングライフを!