
【Python×Selenium】マネーフォワードにCSVデータを自動で取り込んでみた
はじめに
マネーフォワードは便利なクラウド家計簿アプリです。
しかし、長く使っていると口座の数が増えてしまい、管理が大変なことに・・・。そこで、使わなくなった口座を整理しました。
ただし、使っていない口座を非表示にすると、その口座の取引履歴も見られなくなってしまいます。
そのため、取引履歴を別の口座にコピーすることで、非表示にした口座の取引履歴が確認できるようにしようと思いました。
しかし、残念なことにマネーフォワードにはデータのインポート機能がありません。
何百もある銀行やクレジットカードの明細を手動で入力するのはさすがに面倒な作業です。
そこで、Seleniumを使ってCSVデータをマネーフォワードに自動で取り込むPythonスクリプトを作成してみました。
Seleniumとは?
SeleniumはWebブラウザを自動操作するためのツールです。
Pythonをはじめとする複数のプログラミング言語で利用でき、データ入力やスクレイピング、テストの自動化などに活用されます。
スクリプトの概要
今回作成したスクリプトは、次の処理を自動化します。
Chromeブラウザを起動
マネーフォワードにログインし、登録先の口座のページを開く
「手入力」ボタンをクリックして家計簿入力エリアを表示
CSVファイルを読み込み、各取引データを入力
入力内容を保存
ソースコードは以下で公開しています。:
CSVファイルのフォーマット
このスクリプトでは、Web版のマネーフォワードからエクスポートしたCSVファイルを使用します。

CSVファイルは次のような形式になっています。
[0] "計算対象"
[1] "日付"
[2] "内容"
[3] "金額(円)"
[4] "保有金融機関"
[5] "大項目"
[6] "中項目"
[7] "メモ"
[8] "振替"
[9] "ID"
[1] 日付 → 取引日として使用
[2] 内容 → そのまま使用
[3] 金額(円) → 収入または支出金額として使用
[5] 大項目 → カテゴリ設定(未分類以外の場合)
[6] 中項目 → サブカテゴリ設定(未分類以外の場合)
[7] メモ → 内容に追加される場合あり
その他のカラム([0] 計算対象, [4] 保有金融機関, [8] 振替, [9] ID)は、スクリプト内で特に処理されていません。
スクリプトのポイント
1. Seleniumによる自動ログイン
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# Chromeの起動
driver = webdriver.Chrome()
driver.get("https://moneyforward.com/accounts/show_manual/xxxxxxxxxx")
# ユーザー名とパスワードの入力
elem = driver.find_element(By.ID, "mfid_user[email]")
elem.send_keys("<自分のアカウント>", Keys.ENTER)
elem = driver.find_element(By.ID, "mfid_user[password]")
elem.send_keys("<自分のパスワード>", Keys.ENTER)
この部分では、Seleniumを使ってマネーフォワードのログイン画面にアクセスし、ユーザー情報を入力してログインします。
2. CSVデータの読み込みと入力
import csv
import time
time.sleep(2)
with open("data.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
if row[0] in ["#", "0", "計算対象"]:
continue # コメント行をスキップ
# 手入力ボタンをクリック
driver.find_element(By.CLASS_NAME, "cf-new-btn").click()
CSVのデータを読み込み、コメント行をスキップしつつ、取引の入力フォームを開く処理を行っています。
3. 金額の入力とカテゴリ設定
amount = int(row[3])
if amount > 0:
driver.find_element(By.CLASS_NAME, "plus-payment").click()
else:
amount = abs(amount)
elem = driver.find_element(By.ID, "appendedPrependedInput")
elem.clear()
elem.send_keys(amount)
金額がプラスなら「収入」、マイナスなら「支出」として処理し、金額を入力します。

4. データを保存して次の行へ
driver.find_element(By.ID, "submit-button").click()
time.sleep(1) # 保存待機
入力後に保存ボタンを押し、次のデータの処理に移ります。
必要な環境
このスクリプトを実行するには、以下の環境が必要です。
Python(3.x推奨)
Windows環境では、Pythonをインストールする際に「環境変数に追加する」オプションを有効にしてください。
Selenium
以下のコマンドを入力してSeleniumをインストールしてください。
pip install selenium
Google Chrome
最新版のChromeブラウザが必要です。
適切なCSVファイル
取引履歴をエクスポートしたCSVファイルを使用してください。
実行方法
スクリプトを実行する前に、マネーフォワードのアカウント情報とインポート先の口座URLを編集してください。
url = "https://moneyforward.com/accounts/show_manual/xxxxxxxxxxxxxxx" # インポート先の口座URL
user = "<自分のアカウント>"
password = "<自分のパスワード>"
CSVファイルをスクリプトと同じフォルダに配置したら、次のコマンドで実行します。
python mf_import_csv.py data.csv
注意点
マネーフォワードのUI変更により、要素のIDやクラスが変わる可能性があります。
time.sleep()で待機時間を設定していますが、環境によって調整が必要な場合があります。
自動化ツールの利用は、マネーフォワードの利用規約を確認のうえ、自己責任で行ってください。
まとめ
このスクリプトを使うことで、マネーフォワードへの手入力作業を効率化できます。
Seleniumを活用すると、他の自動化も可能なので、参考になれば幸いです。