LoginSignup
1
4

More than 5 years have passed since last update.

ExcelからZaimに書き込む

Posted at

Excelで何らかの計算を行った結果をZaimに転写したい ということ、ありますよね?え?ない?まあ、あるとして話をします。

本来であれば、外部アプリからZaimに投稿するときはZaim APIを使うのが筋なのでしょうが、面倒くさいですし、目的通りの入力ができたかどうかを確認したいので、IEオブジェクトでZaimの画面を表示することにしました。

image.png

※ なお、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からいじるときにも応用が効くかなと。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4