見出し画像

【GAS】Google Apps Script 活用事例 応募者がどの採用媒体を過去に利用していたかを調べるスクリプト

この学生、どっかで見たなぁ・・・・。

採用業務をしていると、新着応募の学生名を見て、どっかで見たなぁと感じることが多々あります。

イベントや他の採用媒体で接触している学生のレジュメを、書類選考官に共有しなければならないという暗黙の了解があり、その御膳立てするのが採用事務のお仕事です。Ctrl + Fで各シートを必死に検索する俺。Wantedly? いや、自社のmeetupイベント?

(こういう工数的には、たいしたことがない。その場しのぎの手段で何とかなってしまう…..。効率化対象として白羽の矢が立たない地味に面倒な業務がいっぱいあるんですよ....。ホントに)

出典:心の中の呟き

そこで、名前をコピペするだけで応募者名が記載されている該当シートへ移動するスクリプトを書いてみました。探す時間を減らすだけでも結構ストレスが減ります。

スクリプト全文

/**
 * 応募者がどの採用媒体経由での応募かを調べた後、該当するシートへ移動する。
 * 本選考の採用管理シートは移動先から除外している。
 * 
 * 
 */

function searchApplicantfromAllSheets(){
  const ui            = SpreadsheetApp.getUi();
  const applicantName = ui.prompt('応募者の名前を入力してください。', '(例)野比のび太', ui.ButtonSet.OK).getResponseText();
  const url           = 'https://docs.google.com/spreadsheets/d/****************/edit#**********'; //本選考の採用管理シート
  const sheetName     = getRecentSheetName_(url);
  const reg           = applicantName.replace(/\s/, ' ').replace('さん', '').replace('様', '');
  const textFinder    = createTextFinder_(reg, sheetName, '半角スペースに変換して検索');


  //検索結果が0件で返ってきた場合は、プロンプトの入力内容で検索
  if(textFinder === 0){
    const result = createTextFinder_(applicantName, sheetName, 'プロンプトの入力内容で検索');

    if(result === 0){
      const reg2    = applicantName.replace(/\s/, '');
      const result2 = createTextFinder_(reg2, sheetName, 'スペースなしで検索');

      if(result2 === 0){
        SpreadsheetApp.getUi().alert('スペースなしや半角スペースでも検索してみましたが、該当者は見当たりませんでした。');
        return
      }
    }
  }
}



/**
 * 
 * @param  {string} reg 応募者の名前、全角を半角に変換して検索したり、スペースなしで検索
 * @param  {string} sheetName 本選考の管理表名
 * @param  {string} word どんな条件で検索しているかをlogで把握するための引数
 * @return {string} 
 * 
 * 本選考の管理表以外で見つかったら、そのシートの該当セルへ移動する。
 * 
 */
function createTextFinder_(query, sheetName, word) {

  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const finder      = spreadsheet.createTextFinder(query).useRegularExpression(true);
  const results     = finder.findAll();

  console.log(`検索語句: ${query} , 検索結果: ${results.length} 件, ${word}`);

  for(const result of results){
    const sheet = result.getSheet();
    const cell  = result.getA1Notation();

    if(0 < results.length && result.getSheet().getName() !== sheetName){

      sheet.getRange(cell).activate();
      SpreadsheetApp.getUi().alert(`シート: ${sheet.getName()}, セル: ${cell}`);
      console.log(`シート: ${sheet.getName()}, セル: ${cell}`);
      return 

    }else if(result.getSheet().getName() === sheetName){
      console.log(`シート: ${sheet.getName()}, セル: ${cell}`);

      if(results.length === 1){
               //lengthが1、 つまり本選考のシートでしか見つからない場合、別条件で検索し直す 
        return 0; 
      }else{
        continue;
      }
    }
  }
  return results.length;
}


/**
 * @param {string} スプレッドシートのURL
 * @return {string} シート名
 * 
 * シート名は変わってもURLはユニークで変わらない。
 * URLからシートIDを切り出して、getSheets()をfor文で回して各IDと付き合わせる
 * 一致したら、現在のシート名を返す。これでシート名が変わっても大丈夫!!
 */
function getRecentSheetName_(url) {
 const spreadsheet = SpreadsheetApp.openByUrl(url);
 const sheets      = spreadsheet.getSheets();

 console.log(url.split('#gid='));

 //シートIDを、文字列から数値に変換する
 const sheetId = Number(url.split('#gid=')[1]);

 //前述のsheetIdが、型も含めて完全一致したときに、シート名を返す。
 for (const sheet of sheets) {
   if (sheetId === sheet.getSheetId()){
     console.log(sheet.getName());
     return sheet.getName();
   };
 }//for
}//end
  1. Wantedlyには、苗字と名前の間に半角スペースが含まれている

  2. 入力内容をそのまま検索、全角スペースなどをそのまま検索

  3. 苗字と名の列を関数などで繋げている場合を想定してスペースなしで検索

上記の3つを想定してどこに名前があるかを検索し続けて、ヒットしたらそのシートの該当する行に移動します。ただそれだけ。

これで、本選考前にWantedlyであった学生かぁーと瞬時に把握出来たり凄く便利で、これはブログに書いておこうと思った金曜日でした。

マガジンもずいぶん溜まってきたな….。

気付いたら、45本ッ!!書籍化の話とか来ないかな?来たらいいなぁ…..。

この記事が気に入ったらサポートをしてみませんか?