パソコンスキルの教科書

パソコンスキルの教科書

東京大学大学院卒。博士課程に進学を志すも、担当教授と折が合わず、無職になる。医者を目指すも結局断念。田舎で派遣社員として働く。「スキルがなければ、仕事ももらえない」と悟り、ビジネススキルを学ぶ。プログラミング、英語を学び、一部上場企業へ転職。年間100時間以上の業務効率化を行い、社内講師に抜擢。海外の案件を担当し、数億円のプロジェクトに携わる。個人の事業でも、月売上100万を達成。現在は、自分の価値を高めるためのスキル向上支援を行う

Gmail受信メールを自動解析して添付ファイル保存|マクロVBAよりGAS

f:id:gene320:20180103051946j:plain

Gmailの受信メールを自動解析して、シートに自動で出力したいとき、マクロVBAでやろうとする人がいます。

しかし、Gmailの受信メールを解析するならマクロVBAよりGASを使うことをオススメします。GASとは、Google Apps Scriptの略で、Googleアカウントをもっていれば誰でも無料で使えるツールのことです。

GASを使えば、Gmailの受信メールを解析して、シートに出力可能です。もし、あなたがGAS初心者でも30分あれば、受信メール解析できるように解説しますので、このまま読み進めていってください。

この記事を読めば、デキるようになること

この記事を活用すれば、Gmailの受信メールを解析できるようになります。具体的には以下のことができるようになります。

[1] Gmailの受信メールの受信日時、件名、送信者、本文
[2] 受信メールに添付されているファイルをGoogleドライブに自動保存
[3] 解析したいメールを件名や受信日時で絞り込む方法
[4] 必要であれば、エクセルシートとしてパソコン保管する

ここまでデキるようになるように分かりやすく説明していきます。

Gmailの受信メールを自動解析してシートに出力する!Google Apps Script(GAS)を使う

Gmailの受信メールを自動解析を行うには、マクロVBAよりGoogle Apps Script(GAS)の方がオススメです。その理由は、Gmailの解析であれば、GASのほうがVBAよりカンタンで早いからです。

もちろん、VBAでも出来なくはありませんが、少し複雑です。また解析に時間がかかります。

そのレベルに到達するより、GASを使うほうがカンタンです。この記事で紹介するプログラムをコピペして貼り付ければ、初心者でも30分程度あればデキるレベルです。

そもそもGASとは?Google版のマクロVBAのようなもの

エクセルマクロを使ってきた人にとって、GASというのは、初めて耳にするかもしれません。そもそもGASとは、Google Apps Script(GAS)のことで、Googleが提供するサービスです。

カンタンにいうと、Microsoftでは、VBAを利用して自動化プログラムを作成する一方で、GoogleではGASを使って自動化プログラムを作成します。

ただし、いくつか違いがあるので、以下で説明します。

違い1|VBAはVisual Basicで、GASはJavascriptをベースにしている

VBAは、Visual Basicというプログラム言語ですが、GASはJavascriptをベースにしたプログラムを書きます。そのため、VBAで作成したプログラムはそのまま使えません。基本的なプログラムの考え方は、同じですが、ところどころ書き方が異なります。

たとえば、VBAでは変数宣言するときDimをつかいますが、GASではvarを使います。他にも、書き方が違うので、VBAだけをやってきた人は、慣れる必要があります。

違い2|VBAはパソコンのCPU、GASはクラウド上のサーバーCPUでそれぞれ動く

Excelの場合、パソコンにファイルを保存し、マクロの実行もパソコンのCPUを使って行います。一方で、Google Spread Sheet(Google版のエクセル)では、ファイルもクラウド上で保存し、スクリプトの実行もクラウド上のサーバーCPUで行われます。

要するに、マクロVBAはあなたが所持しているパソコンで動くが、GASはウェブ上で動くということです。そのため、GASを使うには、ウェブにつながっている必要があります。

Gmailの受信メール解析|保存ファイルを保管、解析条件の変更からエクセルファイル化まで

Gmailの受信メール解析を行う方法をステップごとに紹介していきます。

ステップ1|Googleアカウントを作成

Googleアカウントを持っていない場合、アカウント作成から始めます。

Googleアカウントは、こちらのGoogleの公式サイトを利用ください。

ステップ2|使用するGoogleアカウントでログインする

自動返信をしたいGoogleアカウントでログインします。こちらから使用中のGoogleアカウントで問題ないかどうかを確認します。もし、他のアカウントがいい場合は変更します。

f:id:gene320:20180102220828p:plain

[1] をクリックすると、現在ログイン中のアカウントが表示されます。
[2] が、現在ログイン中のアカウントですので、このアカウントで自動返信しても問題ないことを確認します。

ステップ3|Google spread sheet(スプレッドシート)の作成

Google Spread Sheet(Googleスプレッドシート)を開きます。こちらをクリックして、下の画像の通りに、順番にクリックしていきます。

f:id:gene320:20180102213401p:plain

f:id:gene320:20180102213424p:plain

[1] Googleの機能一覧を開く
[2] スプレッドシートをクリック
[3] 空白をクリック

もし、[2]の部分にスプレッドシートが見当たらない場合は、「もっと見る」をクリックしてみてください。下のほうに見つかるはずです。

ステップ3|Google apps scriptを開く

Google apps scriptを開きます。スプレッドシートを開いた状態で、以下のようにクリックしていきます。

f:id:gene320:20180103055724p:plain

[1] ツールをクリック
[2] スクリプトエディタをクリック

そうすると、以下の画面が出力されます。

f:id:gene320:20180102214933p:plain

ステップ4|Google apps scriptのスクリプトをコピペする

Google apps scriptのコードウィンドウ(以下の画面の赤枠)にスクリプトを記入していきます。

f:id:gene320:20180102214953p:plain

以下のプログラムを上の画像の赤枠の部分にコピペします。

function contact_Gmail() {
  var rowNumber = 2;  
  var mysheetname = 'Gmail解析_' + DateString(new Date());

  var GmailSS = SpreadsheetApp.create(mysheetname);
  var mySheet = GmailSS.getSheets()[0];
  mySheet.setName(mysheetname);
  mySheet.getRange(1,1).setValue("日時");
  mySheet.getRange(1,2).setValue("送信元");
  mySheet.getRange(1,3).setValue("件名");
  mySheet.getRange(1,4).setValue("本文");
  
  var newfolder = DriveApp.createFolder(mysheetname); 
  
  var searchQuery = 'subject:("パソコンスキルの教科書")'; 
  var threads = GmailApp.search(searchQuery, 0, 200);

  var mymsg=[];
  
  var msgs = GmailApp.getMessagesForThreads(threads);
  
  for(var i = 0; i < msgs.length; i++) {    
    mymsg[i]=[];
    for(var j = 0; j < msgs[i].length; j++) {
      mymsg[i][0] = msgs[i][j].getDate();
      mymsg[i][1] = msgs[i][j].getFrom();
      mymsg[i][2] = msgs[i][j].getSubject();
      var nbsp = String.fromCharCode(160);
      mymsg[i][3] = msgs[i][j].getPlainBody().replace(/<("[^"]*"|'[^']*'|[^'">])*>|nbsp/g,'').replace(/&; | /g,'').substring(0,50000);

    }
    var myattachments = msgs[i][j-1].getAttachments(); //添付ファイルを取得
    for(var k in myattachments){
      newfolder.createFile(myattachments[k]); //ドライブに添付ファイルを保存  
    }
  }
  if(mymsg.length>0){  
    GmailSS.getSheets()[0].getRange(2, 1, i, 4).setValues(mymsg); //シートに貼り付け
  }
}

function DateString(date){
  return date.getFullYear().toString()
  + date.getMonth().toString()
  + date.getDate().toString()
  + date.getHours().toString()
  + date.getMinutes().toString()
  + date.getSeconds().toString();
};

コピペしたら、以下のようになります。

f:id:gene320:20180103052558p:plain

次に、このスクリプトを保存します。

f:id:gene320:20180102215022p:plain

以下のような画面が出てくるので、
[1] スクリプトの名前(何でも問題ありません)を記入
[2] OKをクリック
と進めていきます。

f:id:gene320:20180103055528p:plain

ステップ5|動作チェックする

以下の虫のカタチをしたボタンをクリックします。

f:id:gene320:20180102215447p:plain

虫のボタンを押すと、「承認が必要が必要です」という画面が出てきます。「許可を確認」をクリックします。

f:id:gene320:20180102215511p:plain

アカウントを選択という画面が出てきます。現在ログインしているアカウントが上位に出てきますので、それをクリックします。

f:id:gene320:20180102215520p:plain

「このアプリは確認されていません。」と出てきますので、「詳細」をクリックします。

f:id:gene320:20180102215533p:plain

さらに、下の方に「無題のプロジェクト(安全ではないページ)に移動」と出てきますので、それをクリックします。

f:id:gene320:20180102215603p:plain

「無題のプロジェクトにアクセスを許可しますか?」と出ますので、許可をクリックします。

f:id:gene320:20180103052753p:plain

そうすると、新しくスプレッドシートが作成されて結果が出力されます。新しく作成されたスプレッドシートはこちらから確認できます。

f:id:gene320:20180103053450p:plain

スプレッドシートを開くと、解析結果が記載されています。

f:id:gene320:20180103053845p:plain

また、Googleドライブに、新しくフォルダが作成され、その中に添付ファイルが保存されます。新しく作成されたフォルダはこちらから確認できます。

f:id:gene320:20180103053839p:plain

フォルダをクリックすると、添付ファイルが保管されています。

f:id:gene320:20180103053834p:plain

ステップ6|Gmailの解析を行う

動作チェック後に、Gmailの解析を行う場合は、Google Apps Scriptの以下の赤枠で囲われた実行ボタンをクリックします。

f:id:gene320:20180103053942p:plain

そのたびに、新しいスプレッドシートと新しいフォルダが作成されます。

ステップ7|スプレッドシートをエクセルに変換する

必要であれば、スプレッドシートをエクセルに変換可能です。手順は以下の通りです。

f:id:gene320:20180103054007p:plain

Gmailの解析条件を変更したい

上記のステップ5のプログラムの15行目あたりの以下の一文を修正することで、解析する条件を変更可能です。

var searchQuery = 'subject:("パソコンスキルの教科書")'; 

このプログラムの右辺を変更することで検索条件を変更可能です。

未読のみを検索|is:read, isunread

未読のみを解析したい場合

var searchQuery = "(is:unread)";

件名で絞り込む|subject

var searchQuery = 'subject:("パソコンスキルの教科書")'; 

本文、件名などのどこかに含まれる

var searchQuery = '("パソコンスキルの教科書")'; 

特定のメールアドレス

var searchQuery = "from:sample@mail.com";
var searchQuery = "to:sample@gmail.com";

fromは送信元、toは送信先です。

日時

所定の日より後

var searchQuery = "(after:2004/04/16)";

所定の日より前

var searchQuery = "(before:2004/04/18)";

2つ以上の条件で絞り込む

「未読」と「'パソコンスキルの教科書'が含まれる」の2つの条件で絞り込みたい場合は、以下のように記載します。

'(is:unread "パソコンスキルの教科書")'; 2つの条件を半角スペースで空ける

var

var searchQuery = '(is:unread "パソコンスキルの教科書")';

注意|添付ファイルのエクセルがスプレッドシートに紛れ込む

このプログラムを利用して解析したとき、添付ファイルにエクセルが含まれると、以下のようにスプレッドシートのフォルダにエクセルが紛れ込むので、注意してください。

f:id:gene320:20180103054453p:plain

もっとラクをしたいなら

Google Apps scriptを使えば、いろいろなシステムを構築できます。

たとえば、以下のような事です。

Googleフォームに回答した人に自動返信する
・フォームから申し込みがあったときに、Chatworkに自動通知させる
・Gmailの受信メールを解析してスプレッドシートに一覧にする
・定期的にリマインドを指定したメールアドレスやChatworkに通知する

ぜひGoogle Apps scriptを学んでみてください。