エクセルVBAでマクロの実行完了と処理時間をチャットワークに通知する方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでHTTP通信を行う方法についてあれこれお伝えしています。

前回はこちらの記事でした。

エクセルVBAでチャットワークに最もシンプルなメッセージを送る方法
エクセルVBAでチャットワークAPIを利用する方法をお伝えしております。POSTメソッドによるHTTPリクエストによりチャットワークにメッセージを送信する簡単なプログラムを紹介していきます。

エクセルVBAからHTTPリクエストをチャットワークに送って、メッセージを送信する方法についてお伝えしました。

紹介した方法は、「テスト」といったシンプルなメッセージを送るのみでしたので、エクセルVBAからチャットワークにメッセージ…具体的にどんな時に使いますかね?

ということで、今回は一つ便利な使用例として、マクロの実行完了についてチャットワークへの通知してお知らせする方法についてお伝えします。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

では、まずは前回のおさらいからです。

シンプルにチャットワークに「テスト」というメッセージを送るというものです。

Sub チャットワークにメッセージを送る()

Const API_TOKEN As String = "xxxxxAPIトークンxxxxx"
Const ROOM_ID As String = "xxxxxxxx" 'ルームID

Dim httpReq As XMLHTTP60
Set httpReq = New XMLHTTP60

With httpReq
    .Open "POST", "https://api.chatwork.com/v2/rooms/" & ROOM_ID & "/messages"
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .setRequestHeader "X-ChatWorkToken", API_TOKEN
    .Send "body=テスト"
End With

Set httpReq = Nothing
End Sub

今回のポイントは13行目ですね。ここのbodyの値を「マクロの完了メッセージ」にすればOKというわけです。

他の部分はいっぱいあれこれありますが、メッセージを送るための設定とかいろいろやっている部分なので、今回は使いまわしでいけちゃいます。

テスト用のプロシージャ

今回は、以下の記事を参考に、実行時間も含めてチャットで完了報告を送りたいと思います。

遅い…重い…そんなエクセルVBAプログラムの処理速度を劇的に改善する方法
エクセルVBAの実行速度が遅い・重いって時ありませんか?そんな時にエクセルVBAのプログラムの処理速度を速くするテクニックを紹介します。プログラムの実行時間を測定する方法も合わせてお伝えします。
Sub countSpeed()

Dim Start, Finish As Variant
Start = Time

Dim i As Long
Sheet1.Cells.Clear 'Sheet1をクリア

For i = 1 To 500000
    Sheet1.Cells(i, 1).Value = i
    Sheet1.Cells(i, 2).Value = Sheet1.Cells(i, 1).Value * 10
Next i

Finish = Time
MsgBox "マクロの実行が完了しました" & vbLf & "実行時間は" & Format(Finish - Start, "nn分ss秒") & "でした"

End Sub

特に意味があるものではないですが、そこそこ実行時間がかかりそうな処理と、その結果と実行速度をメッセージで表示するものです。

このメッセージボックスの代わりに、チャットワークへのメッセージ送信をしたいというわけです。

チャットワークへのメッセージ送信をプロシージャ化

冒頭のプロシージャについて、汎用性を高めるために、プロシージャ化をします。

ルームIDと、送信するメッセージを渡すと、実際にチャットワークへPOSTリクエストを送り、メッセージを送信するというものです。

Sub sendChat(ByVal roomId As String, ByVal message As String)

Const API_TOKEN As String = ""xxxxxAPIトークンxxxxx"

Dim httpReq As XMLHTTP60
Set httpReq = New XMLHTTP60

With httpReq
    .Open "POST", "https://api.chatwork.com/v2/rooms/" & roomId & "/messages"
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .setRequestHeader "X-ChatWorkToken", API_TOKEN
    .Send "body=" & message
End With

Set httpReq = Nothing
End Sub

チャットワークへのメッセージの生成とsendChatの呼び出し

チャットワークへのメッセージの呼び出しですが、以下のようにcountSpeedを変更します。

Sub countSpeed()

Dim Start, Finish As Variant
Start = Time

Dim i As Long
Sheet1.Cells.Clear 'Sheet1をクリア

For i = 1 To 5000
    Sheet1.Cells(i, 1).Value = i
    Sheet1.Cells(i, 2).Value = Sheet1.Cells(i, 1).Value * 10
Next i

Finish = Time

Const ROOM_ID As String = "xxxxxxxx" 'ルームID
Const ACCOUNT_ID As String = "xxxxxx" 'アカウントID

Dim msg As String
msg = "[To:" & ACCOUNT_ID & "][info]"
msg = msg & "マクロの実行が完了しました" & vbLf
msg = msg & "実行時間は" & Format(Finish - Start, "nn分ss秒") & "でした"
msg = msg & "[/info]"

Call sendChat(ROOM_ID, msg)

End Sub

チャットワークに送るメッセージ文字列を変数msgに生成をして、sendChatを呼び出している16~25行目が新たに追加・修正した部分です。

ACCOUNT_IDには、自分のアカウントIDを付与しています。これで、自分宛の「To」がつきます。

Google Apps ScriptでチャットワークにToや返信でメッセージを送る
Google Apps Scriptでチャットワークのおみくじチャットを作っています。今回はチャットワークのメッセージ記法を使って、おみくじの結果をToや返信のメッセージにする方法です。

実行結果

こちらのプロシージャcountSpeetを実行すると、以下のようにチャットワークにマクロの実行完了を、自分へのメンション付きで、お知らせすることができます。

エクセルVBAでマクロの実行完了をチャットワークに通知

まとめ

エクセルVBAでマクロの実行完了をチャットワークに通知する方法についてお伝えしました。

これで、ちょっと処理時間のマクロをPCで実行しているときに、席を外しちゃったりしても大丈夫ですね。

エラーが出たときにも通知が来るようにするなどをすると良いかもしれませんね。

また、便利な使い方を紹介していきます。

どうぞお楽しみに!

連載目次:エクセルVBAでチャットワークAPIにリクエストする方法

エクセルVBAではIXMLHTTPRequestオブジェクトを使うことでHTTP通信を行うことができます。このシリーズではエクセルVBAからHTTPリクエストを行うことで、チャットワークAPIを活用する方法を紹介していきます。
  1. エクセルVBAでHTTPリクエストをする最も簡単なプログラム
  2. エクセルVBAでIEを使わずにHTMLドキュメントを取得する方法
  3. エクセルVBAでチャットワークAPIにリクエストを送る最も簡単なプログラム
  4. エクセルVBAでチャットワークに最もシンプルなメッセージを送る方法
  5. エクセルVBAでマクロの実行完了と処理時間をチャットワークに通知する方法

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