Excelで何らかの計算を行った結果をZaimに転写したい ということ、ありますよね?え?ない?まあ、あるとして話をします。
本来であれば、外部アプリからZaimに投稿するときはZaim APIを使うのが筋なのでしょうが、面倒くさいですし、目的通りの入力ができたかどうかを確認したいので、IEオブジェクトでZaimの画面を表示することにしました。
※ なお、VBAマクロを使うため、ファイルはxlsm形式で保存する必要があります。
仕組み
仕組みは非常に簡単。IEオブジェクトを使ってZaimを表示し、フォームにデータを書き込みます(本来ならEdge等を使うべきところなのでしょうが、OLEでいじるための情報が見つかりませんでした…)。
今はIEからでもQuerySelector()を使って要素を取得・書き込みできるので楽になりました。
コード
コードです。今回は「振り替え」のみのコードですが、入金時も出金時も大まかには同じはずです。
Public Sub ShowWindow(Amount As Integer, FromID As Long, ToID As Long, TransactionDate As String, Comment As String)
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
Call IE.Navigate("https://zaim.net/money/new?toggle=transfer")
Do While IE.Busy = True Or IE.readyState <> 4
DoEvents
Loop
If IE.LocationURL <> "https://zaim.net/money/new?toggle=transfer" Then
' 目的のページにいけてないと言うことは、ログインがそもそもできてないと思われる。エラーで落とす
Call MsgBox("ログインしてください")
Exit Sub
End If
IE.Document.QuerySelector("#transfer_amount").Value = Amount
IE.Document.QuerySelector("#transfer_from_account_id").Value = FromID
IE.Document.QuerySelector("#transfer_to_account_id").Value = ToID
IE.Document.QuerySelector("#transfer_date").Value = TransactionDate
IE.Document.QuerySelector("#transfer_comment").Value = Comment
End Sub
Zaimでは、口座の情報はIDで管理されていますので、そのIDさえ指定すれば口座を指定できます(入出金ページなどをブラウザの開発者ツールで見ることで確認できます)。口座の数値は大きいので、IntegerではなくLongで指定しておきましょう。
また、日付についてはZaimは"yyyy年mm月dd日"しか受け付けてくれないようです(yyyy/mm/ddではダメでした)。あらかじめExcel側でyyyy年mm月dd日に日付の書式を設定しておき、それを引数に指定しましょう。
あとはExcel側からなんらかの方法を使ってこのメソッドを呼び出せば、値が全て設定されている状態で、振り替えウィンドウが表示されます。値を確認してから「入力」ボタンを押せば入力ができます。
他のWebサイト・WebサービスをExcelからいじるときにも応用が効くかなと。