前回まででレジストリを編集してOutlookのルール作りの画面でスクリプトを実行する選択項目が表示されるところまでをやりました。次に、MoneyWizで取り込むためのCSVファイルを作成するために、まずカラムを決めておこうと思います。列名ですね。
試しに以下のようなCSVファイルを読込ませます。
日付,品目,金額,カテゴリ
2018/11/30,ネスカフェ ゴールドブレンド エコ&システムパック,\1350,食料品
コンマ区切りの一行目がカラム名として認識され、その中でMoneyWizが持っているカラム名と合致するものが自動的に認識されます。
この例では日付、金額、カテゴリが認識されましたが品目はMoneyWizのなかでは説明として登録されているので合致せずデフォルトではインポートしない設定になってしまいました。多分カラム名を説明に変えれば自動的に認識されます。多分。
あと、実際に運用すると分かりますがこのままだとどの口座の取引か不明です。財布とかカードとか電子マネーとか、どこからお金を使ったの? という情報が欠けているんですね。
あとカテゴリも既に存在しているカテゴリから逸脱していると手動作業が発生します。メールの文面、あるいは説明から類推できるのであればその辺も整備しておいた方が良いでしょう。
ちなみに上に書いたサンプル、取り込んだら財布の残高が増えました。-1350としていなかったからでしょう。
というわけでだいたいやるべき事が見えてきました。
- 取引内容が記載されたメールを選別して処理対象とする
- 1で対象とされたメールの内容を分析して日付、説明、金額、カテゴリ、口座情報を得る。
- 2で得た情報を元にCSVファイルを作成する。
Debug.Print Item.Body
End Sub
標準モジュールにこんな感じのプロシージャを書き込みます。
注文番号: 503-6507396-7751820 <https://www.amazon.co.jp/gp/r.html?C=3FLDZT5JFED36&K=1WJSGBNSCWSCJ&M=urn:rtn:msg:201811231330394c15e3b405504ad7abafb4257ef0p0fe&R=X9WITZK65ZI5&T=C&U=https%3A%2F%2Fwww.amazon.co.jp%2Fgp%2Fcss%2Fsummary%2Fedit.html%3Fie%3DUTF8%26orderID%3D503-6507396-7751820%26ref_%3Dpe_492632_159100282_TE_on&H=6DACGZDKJ1QOTNEFNB09JVQ4DUGA&ref_=pe_492632_159100282_TE_on>
注文日:2018/11/23
<https://www.amazon.co.jp/gp/r.html?C=3FLDZT5JFED36&K=1WJSGBNSCWSCJ&M=urn:rtn:msg:201811231330394c15e3b405504ad7abafb4257ef0p0fe&R=1M1UW3MQ0FQ9F&T=C&U=http%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0792PG3S9%2Fref%3Dpe_492632_159100282_TE_item_image&H=FXAE9KHXP0YSQP6VVMHRHRSUMTYA&ref_=pe_492632_159100282_TE_item_image> Echo Dot (エコードット) 第3世代 (Newモデル) - スマートスピーカー with Alexa、チャコール - 2点 <https://www.amazon.co.jp/gp/r.html?C=3FLDZT5JFED36&K=1WJSGBNSCWSCJ&M=urn:rtn:msg:201811231330394c15e3b405504ad7abafb4257ef0p0fe&R=21G71F3E29IKG&T=C&U=http%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0792PG3S9%2Fref%3Dpe_492632_159100282_TE_item&H=USSUATYRFA05VTMMYVWSVDRSRL8A&ref_=pe_492632_159100282_TE_item>
エレクトロニクス
販売:Amazon Japan G.K.
<https://www.amazon.co.jp/gp/f.html?C=3FLDZT5JFED36&K=1WJSGBNSCWSCJ&M=urn:rtn:msg:201811231330394c15e3b405504ad7abafb4257ef0p0fe&R=117ZGRWE2LYKP&T=C&U=https%3A%2F%2Fwww.amazon.com%3A443%2Fgp%2Fredirect.html%3F_encoding%3DUTF8%26location%3Dhttps%253A%252F%252Fwww.facebook.com%252Fdialog%252Ffeed%253Fapp_id%253D164734381262%2526caption%253D%2526display%253Dpopup%2526link%253Dhttp%25253A%25252F%25252Fwww.amazon.co.jp%25252Fdp%25252FB0792PG3S9%25252Fref%25253Dcm_sw_r_fa_doce%2526name%253D%2526picture%253Dhttps%25253A%25252F%25252Fimages-na.ssl-images-amazon.com%25252Fimages%25252FI%25252F41MZrRTS8lL._SCLZZZZZZZ__SY115_SX115_.jpg%2526redirect_uri%253Dhttp%25253A%25252F%25252Fwww.amazon.co.jp%25252Fdp%25252FB0792PG3S9%25252Fref%25253Dcm_sw_r_fa_doce%26source%3Dstandards%26token%3DD5EC69B240AF2BD2E283D624E6D1DEB3CD9E2605%26ref_%3Dpe_492632_159100282&H=WAFTZOWLWGWDCAUISYA6VPKMBMOA&ref_=pe_492632_159100282> <https://www.amazon.co.jp/gp/f.html?C=3FLDZT5JFED36&K=1WJSGBNSCWSCJ&M=urn:rtn:msg:201811231330394c15e3b
405504ad7abafb4257ef0p0fe&R=3MK7NJBWY16LJ&T=C&U=https%3A%2F%2Fwww.amazon.com%3A443%2Fgp%2Fredirect.html%3F_encoding%3DUTF8%26location%3Dhttps%253A%252F%252Ftwitter.com%252Fshare%253Fcount%253Dnone%2526original_referer%253Dhttp%25253A%25252F%25252Fwww.amazon.co.jp%25252Fdp%25252FB0792PG3S9%25252Fref%25253Dcm_sw_r_tw_doce%2526related%253Damazon%25252Camazondeals%25252Camazonmp3%2526text%253D%2526url%253Dhttp%25253A%25252F%25252Fwww.amazon.co.jp%25252Fdp%25252FB0792PG3S9%25252Fref%25253Dcm_sw_r_tw_doce%2526via%253Damazon%26source%3Dstandards%26token%3D98D0A180D8352AD0106E78922A9FA3BF14CB7A37%26ref_%3Dpe_492632_159100282&H=YZK0MFJP4BNJSGATTV4RYK1JRYOA&ref_=pe_492632_159100282> <https://www.amazon.co.jp/gp/f.html?C=3FLDZT5JFED36&K=1WJSGBNSCWSCJ&M=urn:rtn:msg:201811231330394c15e3b405504ad7abafb4257ef0p0fe&R=BA768UOJ2JL7&T=C&U=https%3A%2F%2Fwww.amazon.com%3A443%2Fgp%2Fredirect.html%3F_encoding%3DUTF8%26location%3Dhttps%253A%252F%252Fpinterest.com%252Fpin%252Fcreate%252Fbutton%252F%253Fdescription%253D%25252C%2525
20http%25253A%25252F%25252Fwww.amazon.co.jp%25252Fdp%25252FB0792PG3S9%25252Fref%25253Dcm_sw_r_pi_doce%2526is_video%253Dfalse%2526media%253Dhttps%25253A%25252F%25252Fimages-na.ssl-images-amazon.com%25252Fimages%25252FI%25252F41MZrRTS8lL._SCLZZZZZZZ__SY115_SX115_.jpg%2526title%253D%2526url%253Dhttp%25253A%25252F%25252Fwww.amazon.co.jp%25252Fdp%25252FB0792PG3S9%25252Fref%25253Dcm_sw_r_pi_doce%26source%3Dstandards%26token%3D66F440C4FE2A44A8699AC34842839E4EC556FC25%26ref_%3Dpe_492632_159100282&H=ABAETYFCQQUKH2Q1GIAGT0MTTGGA&ref_=pe_492632_159100282>
¥ 5,980
商品の小計: ¥ 11,960
配送料・手数料: ¥ 0
割引: -¥ 6,460
注文合計: ¥ 5,500
支払い方法
クレジットカード(Amazon MasterCard クラシック): ¥ 5,500
- 必要な情報は注文内容という文字列の後を見れば分かる
- 日付は注文日のあとのyyyy/mm/dd書式の日付を当たればOK。
- 商品名(説明)は日付のあとのタグに囲まれた部分
- 実際に支払う金額は支払方法の後の\マークのうしろの金額。口座はその前のクレジットカードなんちゃら部分で認識させる。
Public Sub Expense_Amazon(Item As Outlook.MailItem)
Dim Line() As String
Dim i, j As Long
Dim delimiter As String
Dim pos_delimiter As Long
Dim uDate As Date
Dim uDesc As String
Dim uCategory As String
Dim uPrice As Long
Dim re As RegExp
Line = Split(Item.Body, vbCrLf)
For i = 0 To UBound(Line) - 1
Line(i) = Trim(Line(i))
' 注文日の取得
If InStr(Line(i), "注文日:") = 1 Then
delimiter = ":"
pos_delimiter = InStr(Line(i), delimiter)
uDate = Mid(Line(i), pos_delimiter + 1)
Exit For
End If
Next
Set re = New RegExp
re.Pattern = "<https([^>]*)>[^<>]<https([^>]*)>"
' 各商品の情報を取得する。
For i = i + 1 To UBound(Line) - 1
If re.Test(Line(i)) Then
' 注文日の次の行が商品名を含んでいるので、こちらもついでに処理する
re.Pattern = "<https([^>]*)>"
re.Global = True
uDesc = re.Replace(Line(i), "")
' 更に次の行がカテゴリを含んでいる場合があるのでそれも処理。
i = i + 1
If InStr(Line(i), "販売") = 0 Then
Select Case Line(i)
Case "エレクトロニクス"
uCategory = "家庭>家電"
' よく分からなければ文字列をそのまま入れる
Case Else
uCategory = Line(i)
End Select
End If
' この後の5行以内に\マークから始まる各品目の金額が入るはず
For j = i To j + 5
If InStr(Line(j), "¥") = 1 Then
uPrice = CLng(Mid(Line(j), 3))
uPrice = uPrice * -1
i = j
Exit For
End If
Next
End If
Next
End Sub


