お仕事おつにゃッス🐈文系未経験から社内SEになった、あっきょ(@daily_code_JP)です!
スプレッドシートで作ったリストから部分一致で結果を保存したいことはありますよね。
GASを使えばそのような便利機能を一瞬で追加できます。
この記事ではコピペOKのGoogle Apps Scriptのコードで解決します。
こんな人におすすめ!
- 部分一致の検索機能を作りたい
- 検索して一致したものをシートに表示して保存したい
- プログラミングでJavaScriptを学んだけど何を作っていいかわからない
誰でも無料で簡単にできますので気軽に学んでいきましょう!
部分一致を検索するイメージ
1クリックでシート内の値をすべて検索し該当するものだけを抽出する機能を作成します。
例えば、氏名に「山」がつく人物のデータを出力するなら「青山」や「木山」などをすべて抽出します。
また、一致した結果を別のシートに転記して見やすくします。
この記事はindexOfメソッドを使った検索機能のコードを改良しています。
詳細はこちら。
部分一致を検索する準備
GASで部分一致したデータを別シートに書く準備をします。
ファイルは1つ必要。
必要なファイル
- Google スプレッドシート…顧客データの作成&コードの貼り付け
スプレッドシートの作成
Google スプレッドシートを作成します。
シートを2つ用意してシート名を「顧客データ」と「検索結果」にそれぞれ変更。
シートの数が足りない場合は赤丸の+字アイコンを押して新規追加します。
「顧客データ」シートには顧客のリストを登録します。
この記事では以下のように、2行目から11行目までに記入していきます。
スプレッドシートの準備は以上です。
サンプルコードを貼り付ける場所
サンプルコードはGoogle スプレッドシートにコピペ。
上バーの「拡張機能」の中にある「Apps Script」をクリックしてコードを貼り付けます。
部分一致を別シートに反映するコード
GASで部分一致した文字を別シートに反映するサンプルコードの公開と解説を行います。
解説の項目
- サンプルコード
- A, 検索ワード記入
- B,シートの定義
- C, 複数のセルから値を取得
- D, 部分一致すれば配列に格納
- E,「検索結果」に部分一致した値を記入
サンプルコード
右上にあるマークを押すとコードのコピペが一瞬でできます。
また、文頭にアルファベットが付いているコメントごとに詳細を説明していきます。
function partMatch(){
//A,検索ワード記入
const searchWord = "山";
//B,シートの定義
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得
const dataSheet = spreadSheet.getSheetByName("顧客データ");
const resultSheet = spreadSheet.getSheetByName("検索結果");
const START_COL_NUM = 1; //getRangeメソッドで読み込み始める列番号
const START_ROW_NUM = 1; //getRangeメソッドで読み込み始める行番号
const lastCol = dataSheet.getLastColumn();
const lastRow = dataSheet.getLastRow();
//C,複数のセルから値を取得
const nameArray =dataSheet.getRange(START_ROW_NUM, START_COL_NUM, lastRow, lastCol).getValues(); //「顧客データ」シート内のデータを全て取得
const nameArrayLen = nameArray.length;
const matchArray = []; //部分一致したものだけを格納
//D,部分一致すれば配列に格納
for(var i=0; i<nameArrayLen; i++){
if( i===0 ){ //最初の要素は判定処理しない
continue;
}else{
const valueArray = nameArray[i][0].indexOf(searchWord);
if(valueArray != -1){
matchArray.push(nameArray[i]);
}
}
}
//E,「検索結果」に部分一致した値を記入
const matchArrayLen = matchArray.length;
resultSheet.getRange(START_ROW_NUM, START_COL_NUM, matchArrayLen, lastCol).setValues(matchArray);
}
A, 検索ワード記入
//A,検索ワード記入
const searchWord = "山"; //検索する言葉
検索する文字を定数searchWordに記入します。
この例では「山」を検索対象にしていますが、どの単語に変更しても問題ありません。
B,シートの定義
//B,シートの定義
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得
const dataSheet = spreadSheet.getSheetByName("顧客データ");
const resultSheet = spreadSheet.getSheetByName("検索結果");
const START_COL_NUM = 1; //getRangeメソッドで読み込み始める列番号
const START_ROW_NUM = 1; //getRangeメソッドで読み込み始める行番号
const lastCol = dataSheet.getLastColumn(); //最終列の番号
const lastRow = dataSheet.getLastRow(); //最終行の番号
操作するスプレッドシートのシートの定義をします。
定数dataSheetには「顧客データ」、定数resultSheetに「検索結果」のシートを指定します。
また、getRangeメソッドで読み込み始める番号を定義して処理するセルの位置を決めます。
最終行と最終列を取得するメソッドの詳細はこちらから。
C, 複数のセルから値を取得
//C,複数のセルから値を取得
const nameArray =dataSheet.getRange(START_ROW_NUM, START_COL_NUM, lastRow, lastCol).getValues(); //「顧客データ」シート内のデータを全て取得
const nameArrayLen = nameArray.length;
const matchArray = []; //部分一致したものだけを格納
「顧客データ」シート内の値を全て取得します。
getValuesメソッドで顧客情報をすべて取得した後、二次元配列内の要素の個数をかぞえます。
また定数matchArrayで空配列を定義し、のちのDの処理で部分一致したデータを格納します。
複数のセル内の値を取得するgetValuesメソッドの詳細はこちら。
D, 部分一致すれば配列に格納
//D,部分一致すれば配列に格納
for(var i=0; i<nameArrayLen; i++){
if( i===0 ){ //最初の要素のみ別の処理
continue;
}else{
const valueArray = nameArray[i][0].indexOf(searchWord);
if(valueArray != -1){
matchArray.push(nameArray[i]);
}
}
}
取得した二次元配列内の値に検索する文字が含まれていれば空配列に格納します。
配列の1番目に、1行目の「顧客データ」の文字が入っているのでcontinueで除外。
その他の要素は一致する文字があるか判定します。
1つでも一致する文字があればpushメソッドでmatchArrayに格納します。
一致する文字を検索するindexOfメソッドの詳細は以下の記事をご参考ください。
E,「検索結果」に部分一致した値を記入
//E,「検索結果」に部分一致した値を記入
const matchArrayLen = matchArray.length;
resultSheet.getRange(START_ROW_NUM, START_COL_NUM, matchArrayLen, lastCol).setValues(matchArray);
部分一致した値を格納した配列を「検索結果」シートのセル内に記入します。
複数のセルに値を記入するsetValuesメソッドの詳細は以下の記事から。
サンプルコードの説明は以上です。
部分一致した値を書き込むテスト
実際に、部分一致を別シートに書き込むテストをします。
Apps Scriptの上部にあるバーの文字が「partMatch」なら、左側の「実行」を押します。
「このアプリはGoogleで確認されていません」と表示した場合はこちら。
画像のように「検索結果」シートに反映されてたら成功です。
氏名が「山」と部分一致するデータが結果として表示されました。
おわりに | 業務を自動化して残業を減らすには
以上、GASで部分一致の検索するサンプルコードでした。
- GASを使えば部分一致のデータを別シートに転記できる
- indexOfメソッドやsetValuesメソッドなどを使えば楽々
- コードは少し長いがコピペOKなので自由に使おう
そのままコピペして日常業務やプログラミングの練習に使ってみましょう。
GASを効率的に学ぶなら以下の2つの方法が多いです。
- 参考書やオンライン教材で独学
- プログラミングスクールを利用
正しく学ぶことで非エンジニアでも実用的な業務効率化のスキルが身に付きます。
デイコーでは、GASのサンプルコードからおすすめのプログラミングまで幅広く紹介。
初心者にもわかりやすく解説しています。
プログラミングスクールは82社を分析したッス!
次回の記事もご期待ください!
それでは、よいプログラミングライフを!