【GAS】Google Apps Scriptで定型業務のタスク進捗管理

Source Code Software ComputerGAS

定型業務の業務管理を行う際、担当の進捗をスプレッドシートを用いて管理することが良く行われます。

業務の各ステップに納期を設けても、納期に遅れがちな人にはリマインドを送る必要があります。

とはいえ、各人の納期をいちいち覚えておくのはめんどくさい。。。

そこで、googleのスプレッドシートに記載の進捗を毎日自動で確認し、遅れそうな場合にはリマンドメールを自動送信してくれるGASを作成しましたので、そのコードを共有します。

作成したツール

以下のようなスプレッドシートでの進捗管理表から進捗状況をチェックし、納期の5日前を過ぎたものについてリマインドメールを自動で飛ばすGASです。

FからI列に各案件のステップごとの納期と進捗を記載します。

作成したGAS

function myFunction() {
  //データ取得
  const book = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = book.getActiveSheet();
  
  // 表の開始行・終了行数を取得
  const begin_row = 4;
  const last_row = sheet.getLastRow(); 
  
  //今日の日付を取得
  let today =  new Date();  
  today = Utilities.formatDate(today, "JST","yyyy/MM/dd");

  //1行ずつ判別
  let col_list = ["F","G","H","I"];// 日付を見る列
  let step_list = ["step1","step2","step3","step4"];// 日付を見る列
  let result_list = [];//判別した結果、リマインドを送るリスト
  let counta = 0;
  for(let i = begin_row; i <= last_row; i=i+2) {
    for(let j = 0; j < col_list.length; j++) { 
      //納期取得
      let dead_line_cell = col_list[j]+i;
      let dead_line_value = sheet.getRange(dead_line_cell).getValue();
      let dead_line_day = Utilities.formatDate(dead_line_value,"JST","yyyy/MM/dd");

      dead_line_value.setDate(dead_line_value.getDate()- 5 );
      let alarm_day = Utilities.formatDate(dead_line_value, "JST","yyyy/MM/dd");
      
      //進捗の判別
      let progress_cell_num = i+1;
      let progress_cell = col_list[j]+progress_cell_num;
      let progress = sheet.getRange(progress_cell).getValue();      

      // 納期の達成の判別:達成しておらずアラーム日を過ぎている場合
      if(today >= alarm_day && progress !== "〇"){
        // 案件名
        let cell1 = "B"+i;
        let title = sheet.getRange(cell1).getValue(); 
        // 担当者
        let cell2 = "C"+i;
        let responsible = sheet.getRange(cell2).getValue(); 
        // 結果をリストに格納
        result_list[counta] = `案件:${title},担当者:${responsible},step:${step_list[j]},納期:${dead_line_day}`;
        counta++;
        break;//次の行に進む
      }
    }  
  }

  //送信文の作成
  let text = result_list[0] + '\n';
  for(let k=1;k < result_list.length; k++){
      text = text + result_list[k] + '\n';
  }

  //結果をメールを送る
  GmailApp.sendEmail('任意のメルアド','【業務納期アラート】',text);
}

コメント

タイトルとURLをコピーしました