Ribbit.work

ExcelからChatworkにメッセージを送る

VBA

last modified date2021-9-3

publish date2021-9-3

ソースコード

' 送信先URI
Private Const END_POINT As String = "https://api.chatwork.com/v2/"

' 使用するAPIトークン
Private Const API_TOKEN As String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Public Function Api( _
        ByRef method As String, _
        ByRef url As String, _
        ByRef param As String) As String

    Dim httpRequest As Object
    Set httpRequest = CreateObject("MSXML2.XMLHTTP")

    With httpRequest
        Call .Open(method, END_POINT & url, False)
        If method = "POST" Or method = "PUT" Then
            Call .setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        End If
        Call .setRequestHeader("X-ChatWorkToken", API_TOKEN)
        Call .send(param)

        Api = .responseText
    End With
End Function

Public Function SendMessage(ByRef roomId As String, ByRef message As String) As String

    Dim url As String, param As String
    url = "rooms/" & roomId & "/messages"

    param = "body=" & message

    SendMessage = Api("POST", url, param)
End Function

解説

API_TOKENの部分に利用するユーザのAPIトークンを貼り付けてください。APIトークン(使用ユーザ)も動的にしたい場合は、モジュールではなくクラスを作成するか、定数から引数に移動させてください。

後は、上記のファンクションを以下のように呼び出すだけで取得できます。

Call SendMessage("00000", "このメッセージはExcelから送信されました")

"00000"の部分が送信先のグループチャットになります。グループチャットの取得については、以下の記事を参考にしてください。今回使ったApiファンクションを使えば、2行足すだけで実装することができます。

ExcelからChatworkのユーザ一覧を取得する

送信後に取得できるHTTPヘッダー情報などは、以下を参考にしてください。

Chatwork APIドキュメント - エンドポイント: /contacts

グループチャット名からメッセージを送信する

もしこのVBAプログラムをExcel利用者向けに使用する場合、メッセージの送信のために、ルームIDを指定しないといけないのは不親切です。

予めコンタクト一覧をリスト化しておくのもいいですが、リアルタイムに取得する場合のため、グループチャット名を指定してメッセージを送信できるファンクションもご紹介しておきます。

※上述した、コンタクト一覧を取得する記事内で紹介しているファンクション及び、JsonConverterを使うことを前提としています

Public Sub SendFromName(ByRef name As String, ByRef message As String)

    Dim records As Object
    Set records = JsonConverter.ParseJson(GetContacts)
    Dim record As Object
    For Each record In records
        If name = record("name") Then
            Call SendMessage(record("room_id"), message)
            Exit For
        End If
    Next
End Sub

この記事を読んだ方におすすめの記事

Excel VBAの高速化はこれだけでOK!コピペで使えるコードを紹介

Excel VBAの高速化はこれだけでOK!コピペで使えるコードを紹介

VBA
2021-9-3
ExcelからChatworkのユーザ一覧を取得する

ExcelからChatworkのユーザ一覧を取得する

VBA
2021-9-3
VBAでマジックナンバーをスマートに消したい!

VBAでマジックナンバーをスマートに消したい!

VBA
2021-9-1
VBAでエラー処理とThrow処理を両方行う方法

VBAでエラー処理とThrow処理を両方行う方法

ExcelVBA
2021-8-16
【参照設定不要】Base64フォーマットにエンコードする

【参照設定不要】Base64フォーマットにエンコードする

ExcelVBA
2021-8-16

最新の記事

KintoneからChatworkのユーザ一覧を取得する

KintoneからChatworkのユーザ一覧を取得する

JavaScriptKintone
2021-9-15
TypeScriptで楽天ブックス書籍検索APIを使う📚

TypeScriptで楽天ブックス書籍検索APIを使う📚

TypeScriptJavaScript
2021-9-13
【kintone】Webフォントを適用する

【kintone】Webフォントを適用する

KintoneJavaScript
2021-9-8
KintoneからChatworkにメッセージを送る

KintoneからChatworkにメッセージを送る

JavaScript
2021-9-6
Excel VBAの高速化はこれだけでOK!コピペで使えるコードを紹介

Excel VBAの高速化はこれだけでOK!コピペで使えるコードを紹介

VBA
2021-9-3