【作業3割減】GASで部分一致した値を別シートに書き込むサンプルコード

当ページのリンクには広告が含まれています。
部分一致した値をシートに反映するサムネ

-文系卒のあっきょが残業を1時間も減らせた理由とは?-

プログラミングを学んで業務自動化アプリを自作すれば、残業時間を圧倒的に減らせます。

事務職や営業職などの非エンジニアでも、リスキリングで業務の負担を減らしています

プログラミングスクールなら、仕事終わりの夜遅くにオンラインで自宅学習

しかも、厚生労働省の教育訓練給付金制度を使えば受講料が最大70%OFFとお得。

プログラミングスクールはこんな社会人におすすめです。

  • リスキリングで基礎からプログラミングを学びたい人
  • 日常業務を自動化して残業時間を減らしたい人
  • 転職や副業で有利なスキルを身につけたい人
  • 独学で挫折した経験がある人
あっきょ

おかげで平日でも趣味の時間を取れたッス!

文系未経験から社内SEになった、あっきょ(@daily_code_JP)です!

スプレッドシートで作ったリストから部分一致で結果を保存したいことはありますよね。

GASを使えばそのような便利機能を一瞬で追加できます。

この記事ではコピペOKのGoogle Apps Scriptのコードで解決します。

こんな人におすすめ!

  • 部分一致の検索機能を作りたい
  • 検索して一致したものをシートに表示して保存したい
  • プログラミングでJavaScriptを学んだけど何を作っていいかわからない

誰でも無料で簡単にできますので気軽に学んでいきましょう!

目次

サイト運営者

あっきょ

あっきょ

文系未経験から社内SEになった地方の物流企業の社員。一から開発したオリジナルアプリで業務効率化し残業80%減を達成。事務職や営業職のためのプログラミングを学べる『デイコー』を運営。得意な言語 : GAS, JavaScript, Python

部分一致を検索するイメージ

GASでスプレッドシートのセル内のデータが部分一致する機能を作成する概要

1クリックでシート内の値をすべて検索し該当するものだけを抽出する機能を作成します。

例えば、氏名に「山」がつく人物のデータを出力するなら「青山」や「木山」などをすべて抽出します。

また、一致した結果を別のシートに転記して見やすくします。

この記事はindexOfメソッドを使った検索機能のコードを改良しています。

詳細はこちら。

部分一致を検索する準備

GASで部分一致したデータを別シートに書く準備をします。

ファイルは1つ必要。

必要なファイル

  • Google スプレッドシート…顧客データの作成&コードの貼り付け

スプレッドシートの作成

Google スプレッドシートを作成します。

シートを2つ用意してシート名を「顧客データ」と「検索結果」にそれぞれ変更。

シートの数が足りない場合は赤丸の+字アイコンを押して新規追加します。

GASでスプレッドシートのセル内のデータが部分一致する機能を作成する準備 シート名を変更

「顧客データ」シートには顧客のリストを登録します。

この記事では以下のように、2行目から11行目までに記入していきます。

GASでスプレッドシートのセル内のデータが部分一致する機能を作成する準備 シートのリストを埋める

スプレッドシートの準備は以上です。

サンプルコードを貼り付ける場所

サンプルコードはGoogle スプレッドシートにコピペ。

上バーの「拡張機能」の中にある「Apps Script」をクリックしてコードを貼り付けます。

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」なら、左側の「実行」を押します。

GASでスプレッドシートのセル内のデータが部分一致を別シートに転記するpartMatch関数を実行

「このアプリはGoogleで確認されていません」と表示した場合はこちら

画像のように「検索結果」シートに反映されてたら成功です。

氏名が「山」と部分一致するデータが結果として表示されました。

GASでスプレッドシートのセル内のデータが部分一致を別シートに転記するpartMatch関数を実行した結果

おわりに | 業務を自動化して残業を減らすには

以上、GASで部分一致の検索するサンプルコードでした。

  • GASを使えば部分一致のデータを別シートに転記できる
  • indexOfメソッドやsetValuesメソッドなどを使えば楽々
  • コードは少し長いがコピペOKなので自由に使おう

そのままコピペして日常業務やプログラミングの練習に使ってみましょう。

GASを効率的に学ぶなら以下の2つの方法が多いです。

  • 参考書やオンライン教材で独学
  • プログラミングスクールを利用

正しく学ぶことで非エンジニアでも実用的な業務効率化のスキルが身に付きます

デイコーでは、GASのサンプルコードからおすすめのプログラミングまで幅広く紹介。

初心者にもわかりやすく解説しています。

あっきょ

プログラミングスクールは82社を分析したッス!

次回の記事もご期待ください!

それでは、よいプログラミングライフを!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

文系未経験のWebエンジニア。事務職がプログラミング学習して社内SE部門立ち上げ&Webサイト作成。業務効率化で残業80%減を達成。得意な言語 : GAS, JavaScript, Python

目次