Google Apps Script(GAS)で効率化・自動化 その2

IT

前回に引き続き、Google Apps Scriptのお勉強です。

今回は、Gmailの内容を取得してスプレッドシートに記録する、記録を定期的に行う、そして記録した内容を可視化するところまでやりました。

Udemyの講座を元にお勉強しています。

私が受講したUdemyの講座

「Google Apps Scriptの仕事効率化・自動化をプログラミングで実現」という講座のセクション8:[自動化④]問い合わせ数の自動集計の内容です。

【業務自動化をゼロからマスター】Google Apps Scriptの仕事効率化・自動化をプログラミングで実現
【半年で登録者数2100人突破】Google Apps Script(GAS)をマスターして毎日の業務(gmail、google スプレッドシート)を劇的に自動化させよう。

今回学んだ内容

メールを加工して可視化する、色々な処理で使えそうな内容です。

1.Gmailからメールを取得
 ↓
2.スプレッドシートに記録
 ↓
3.定期的に実行する
 ↓
4.データを集計・可視化

Gmailからメールを取得してスプレッドシートに記録

1.特定の文字をキーにGmailから検索結果を取得します。
2.後の判定に必要なスプレッドシートの情報を取得します。
 (取得済メールのメッセージID、最終行)
3.取得したGmailの内容は配列になっているのでループ処理で取り出しつつ、必要な情報のみを取り出して、スプレッドシートに記録するための配列に格納します。
4.スプレッドシートに記録します。

以下が私が作ったサンプルコードです↓

function getMeruUri() {
  //メールを取得

  var searchText = "【メルカリ】取引が完了しました";
  var start = 0;
  var max = 100;
  var threads = GmailApp.search(searchText, start, max);
  var messages = GmailApp.getMessagesForThreads(threads);

  //スプレッドシートを取得

  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var idArrays = sheet.getRange(`E2:E${lastRow}`).getValues();
  var flatenArray = idArrays.flat();
  
  //メールの内容を加工して、スプレッドシートに記録するための配列に格納

  var arrays = [];
  for(var i = 0; i < messages.length; i++){
    for(var j = 0; j < messages[i].length; j++){
      var msgId = messages[i][j].getId();
      //メッセージIDで判断して新たなメールのみ処理する
      if(flatenArray.includes(msgId) == false){
        var row = [
           messages[i][j].getDate(),
           messages[i][j].getPlainBody().split("商品ID : ")[1].split("\n")[0],
           messages[i][j].getPlainBody().split("商品名 : ")[1].split("\n")[0],
           messages[i][j].getPlainBody().split("商品価格 : ")[1].split("円")[0],
           msgId
           ];
        arrays.push(row);
      }
    }
  }
  
  //スプレッドシートに記録

  if(arrays.length > 0){
    SpreadsheetApp.getActiveSheet().getRange(`A${lastRow + 1}:E${lastRow + arrays.length}`).setValues(arrays);
  }
  
}

★難しポイント★
 スプレッドシートへの記録は、「どの範囲に記録するかを指定する必要がある」というところが難しいと感じました。

スプレッドシートの「最終行+1行目」から「最終行+取得した件数行目」までの範囲といった指定をする部分ですね。慣れれば簡単に感じるようになるでしょうが。

定期的にGASを実行する

これはノーコードなので簡単でした。

時計マークをポチっと押します。

定期的に実行したかったら「時間主導型」を選択して、「日付ベースのタイマー」などで頻度を選んで保存すればOKです。

これで、先ほど作成したGASが定期的に実行され、検索条件に合致する新着メールがあればスプレッドシートに記録してくれるわけです。

スプレッドシートに記録したデータを集計・可視化

新規データが追加された際に自動的にデータを更新するためには、Query関数というものを使います。スプレッドシートで使えるSQL文の様なものです。

スプレッドシートのセルに 「=query(・・・)」という感じに記述することで、Query関数が使えて、データをSQLチックに集計することができます。

以下のように、日付別の売上げ金額を集計するようなSQLを実行できます。

Query関数でスプレッドシートの内容を自動集計するようにできていれば、それを元に作成するグラフも自動的に更新されます。

列を選択してグラフを挿入すれば、商品の売上高のグラフが作成でき、新着メールが来れば(売上げがあれば)自動的に更新されていく仕組みの完成です。

メルカリ売り上げの自動集計を作ってみた

上でもちょっと紹介していますが、今回の内容を元にメルカリ売り上げをスプレッドシートに自動集計する処理を作ってみました。

メルカリで取引が完了すると、以下のような売上金額が記載されたメールが届きます。
このメールをスプレッドシートに集計するものです。

これをスプレッドシートに記録すると以下のような感じにできます。

メールに販売手数料や配達料も記載されていれば、色々取れるのですが…
まあ、お勉強の一環ということで今のところはこれで我慢しましょう。

まとめ

1.GASを使ってGmailの内容を取得・加工してスプレッドシートに記録することを学びました。

2.スプレッドシートに記録した内容は、Query関数を使って最新の状態に更新するという手法も学べました。

3.自分が現実に受信しているメールを集計する処理を作ってみて、まあまあ使えるという感触を得ました。色々と応用が利きそうです。

コメント

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