この物語は、入社して一年目の新人社員が上司の指南のもと、業務を自動化していく様を記したものです。物語はフィクションですが、自動化の手法は実際にパソコンやスマートフォンで実践できるものですので、物語と自動化作業の両方を楽しめます。(前回のストーリーはこちら)
僕(田中)はいつになく熱心に仕事に励んでいた。というのも、今回、秋の特別キャンペーンのための特別任務を社長から任されたのだ。このプロジェクトのために、10人ほどの短期アルバイトを募集した。つまり、いつも一番下っ端の僕が一時的にアルバイトのみんなを率いるリーダーとなる。もしかすると、次期リーダーの適性も測られているのではとドキドキする。
そして、仕事の内容は、いろいろな場所に行ってビラ配りをしてもらうというものだ。ただし、最大限に予算を活用するために、一人一カ所に留まるのではなく、それぞれが、いろいろな場所に移動しながら、対象となるユーザーを探しつつ、物件情報を手渡しするという作戦になっている。
ちなみに、読者の皆さんは、新人の僕が、一人でこの高度な作戦を指揮できるのだろうかと心配になったことだろう。そう、僕も不安だったが、それ以上に、美人の太田先輩が不安に思ってくれたようだ。
先輩は「初の大仕事ね。田中君なら大丈夫、頑張ってね。」と優しく言ってくれていたものの、実際には心配してどのようにやったら良いのかを手取り足取り教えてくれた。僕も失敗する訳にはいかないので、存分に太田先輩に頼った。そして、先輩の有能さを改めて思い知ったのだった。
ところで、去年の担当者に様子を聞いたところ、移動しながらのビラ配りには欠点があるということが判明した。一度ビラ配りを始めてしまうと、うっかり時間を忘れてしまうという人が続出し、予定のエリアを全部網羅することは出来なかったという。
そこで、先輩と相談して今年は、各グループに対して移動場所を定期的にLINEで通知するという作戦を立てた。これなら、うっかり時間を忘れたり、行き先を間違えると言うこともないだろう。
その際、太田先輩が僕に尋ねてきた。
「ねぇ、田中君、10人の人に同時にLINEするなんて、簡単だよね?」
「え?!先輩、10人ですか?ーーーえっと、はい。当日は、根性出してスマートフォンにかじりつく所存です。」
僕の答えに、太田先輩が凍り付いた。
「え?!田中君、手動でやるつもりなの?」
「え?!太田先輩、手動以外に方法があるんですか?」
「もちろん、こんな時こそプログラミングでしょ!Excel VBAでも簡単にできるわ!」
「ExcelからLINEへメッセージの送信ができるなんて、思いもしませんでした。」
僕が感心していると、太田先輩がさらっと言った。
「田中君、さっき『根性』って言ったけど、仕事で『根性出せ』なんて言われたら、それをプログラミングで解決できないか考えてみるのが大切ね。」
こうして、僕はExcelで予定表を組み、それに基づいてVBAでLINEへメッセージを自動送信するプログラムを作ったのだった。
そして、当日、無事にプロジェクトは完了した。その成果として、有力な見込み客からの問い合わせが数件あったようだ。こうして、僕と太田先輩の初めての共同作業は大成功だった。
実際のプログラム
さて、今回、田中君と太田先輩が作ったプログラムは、Excel VBAからLINEのメッセージを自動送信するというものです。実際に動かしてみましょう。
今回のプログラムを利用するのにあたって、LINEのアカウントが必要になります。最初にLINEの設定から行いましょう。このために、LINE Notifyという機能を利用します。LINE Notifyを利用すると手軽に特定のグループや個人にメッセージを送信できます。
【手順1:LINE Notifyのサイトでトークンを取得する】
まずは、LINE NotifyのWebサイトにアクセスします。
画面右上にある「ログイン」のリンクをクリックし、LINEのアカウントを入力してログインします。(このために、メールアドレスやパスワードを登録しておく必要があります。)そして、右上の自分の名前をクリックすると表示されるメニューから「マイページ」をクリックします。
続いて、画面の下の方にある「トークンを発行する」をクリックします。
そして、続いて出てくるグループを選択します。ここでは、テストが簡単になるように『1:1でLINE Notifyから通知を受けとる』を選びましたが、実際にLINEで送信したいグループを選択します。なお、グループを選択した場合、グループにLINE Notifyを招待しておく必要があります。
すると、トークンが発行されます。ここで得られたトークンを利用してメッセージを送信します。この値を覚えておきましょう。
【手順2:Excelで表を作る】
次に、Excelを起動し、「何時、誰へ、どんなメッセージを送るのか」を記入します。この誰の部分に、先ほど取得したトークンを書き込んでおきます。
【手順3:VBAのプログラムを記述する】
[Alt] + [F11]キーを押して、VBAエディタを起動しましょう。そして、画面左上にある[プロジェクト]からSheet1を選んでダブルクリックします。そして、そこに以下のようなプログラムを記述します。今回のプログラムは、WindowsのExcel専用です。
' 一分に一回実行されるタイマーを設定 --- (*1)
Sub CheckNext()
nt = Now() + TimeValue("00:01:00")
Application.OnTime nt, "Sheet1.CheckTime"
End Sub
' Sheet1に書かれている時刻を確認 --- (*2)
Sub CheckTime()
ima = Format(Now(), "hh:mm")
' 表を最大100件確認する
For i = 2 To 100
nanji = Format(Cells(i, 1), "hh:mm")
If nanji = ima Then
token = Cells(i, 2)
msg = Cells(i, 3)
LineSend token, msg
End If
Next
CheckNext
End Sub
' tokenにmsgのLINEメッセージを送信 --- (*3)
Sub LineSend(token, msg)
Dim oXMLHTTP As Object
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
oXMLHTTP.Open "POST", _
"https://notify-api.line.me/api/notify", _
False
oXMLHTTP.setRequestHeader _
"Content-Type", _
"application/x-www-form-urlencoded"
oXMLHTTP.setRequestHeader _
"Authorization", _
"Bearer " & token
oXMLHTTP.send _
"message=" & msg
End Sub
【手順4:実行する】
カーソルを、サブルーチン「CheckTime」に合わせた状態で実行ボタンをクリックします。 すると、タイマーが開始され、定刻になるとLINEにメッセージを送信します。
プログラムを確認してみましょう。このプログラムの(*1)の部分「CheckNext」では、一分後にタイマーを設定します。このタイマーは、一分後にサブルーチン「CheckTime」を実行するというものです。そして、CheckTimeの最後に、改めてCheckNextを呼び出すので、必ず一分に一度、時間をチェックするようになります。ここで実際にタイマーを設定しているのが、Application.OnTimeです。引数に、タイマー時刻と実行するサブルーチン名を指定することで、タイマーを設定できます。
次に(*2)の部分「CheckTime」では、Sheet1に書かれている時刻を確認して、同じ時刻があれば、LINEにメッセージを送信するという処理になっています。ここでは、ちょっと手抜きしてSheet1の100行目までをチェックするというものになっています。100行以上になる場合は、For構文の値を増やしてください。
そして、(*3)の部分では、Line Notifyを利用してLINEにメッセージを送信します。LINE Notifyではヘッダにあらかじめ取得しておいたトークンを指定することで、メッセージを送信できるというものになっています。
まとめ
以上、今回は、Excel VBAからLINEにメッセージを送信するプログラムを紹介しました。なお、Excelを閉じるとタイマーが停止してしまうので、パソコンを起動しっぱなにしておく必要があります。一般的にパソコンを操作しないでいると、スリープになってしまうため、実際に運用するときには、スリープ設定を解除するなど、ちょっと設定を変える必要があります。とは言え、ExcelでLINEに送信するメッセージを制御できるので、いろいろな場面で利用できるでしょう。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ、2010年 OSS貢献者章受賞。技術書も多く執筆している。