Help us understand the problem. What is going on with this article?

ExcelからZaimに書き込む

More than 1 year has passed since last update.

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

TakamiChie
NPO法人 まちづくりエージェント SIDE BEACH CITY.理事。フリーランスのプログラマ。横浜・横須賀でIT勉強会の主催などをやってます。
https://onpu-tamago.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away