1.MFF形式の考え方
_MFFマクロは、変換元家計簿アプリA→中間形式→変換先家計簿アプリB という具合に、2回の変換を経てデータ移行を実現します。その中間形式に相当するのがMFF(むふふ)形式であり、様々な家計簿アプリのデータ形式の研究結果に基づき、ごくごく平均的なデータ項目で構成しています(つまり、あらゆる家計簿アプリのあらゆるデータ項目を網羅しようとしているのではない)。その基本的な考え方は以下のとおりです。
-
費目は2階層までに対応
大半の家計簿アプリに合わせて甲乙の二階層に対応しました。 -
「お店」ではなく「取引先」
収入・支出取引の場合には店舗名を、振替取引の場合には振替元ないし振替先の口座名称を入れる欄として設けました。 -
支出・収入欄は別にする
これも大半の家計簿アプリに合わせました。支出・収入の両方に金額を入れることはできません(V2.70からの方針です)。なお、マイナスの金額を入れることはできますが、家計簿ソフト/アプリによってはそのようなデータを受け付けられない場合がありますのでご注意ください。 -
内容とメモは別にする
支出の品名や収入の名目を入れる欄として「内容」欄を、また、そのときの特別な事情を記載する欄として「メモ」欄を設けます。筆者の考え方としては、メモ欄を使う取引は頻繁には発生しない想定です。 -
計算対象欄は必要
当初、この欄は省略するつもりでしたが、実装している家計簿アプリが多いことを考慮して加えました。0か1を入れることで、掛け算をして総和を求めることで収支をExcel上で簡単に計算できます。それが家計簿アプリ側の収支の認識と合っているか確認することで動作チェックを行っています。 -
口座に種別は無い
現金、電子マネー、ポイント、銀行口座、証券口座、クレジットカード、通販など、ありとあらゆる資産は全て口座として取り扱い、一切区別しません。よって、電子マネーで電子マネーをチャージする、といった通常は有り得ない取引も表現できます。 -
ソートや抽出をする需要が高い項目を左側にする
Excelのオートフィルタを使う前提でこのようにします。
![]() |
MFF形式データの例 |
2.MFF形式のデータ項目
-
A列=日付
YYYY/MM/DD形式とします。「日付の無い取引データは有り得ない」ことから、MFFマクロでは各行のデータの有無をA列のデータの有無で判断しています。 -
B列=費目甲
MFF形式では費目を二階層としており、上位階層を費目甲と呼びます。振替取引の場合は、"振替支出"か"振替収入"のいずれかが入ります。 -
C列=費目乙
費目の下位階層を費目乙と呼びます。振替取引の場合は必ず空欄になります。 -
D列=口座名
取引の主体となる口座の名称が入ります。オートフィルタでこの列を単一の口座名で絞り込むと、その口座の出納を表示することになります。 -
E列=取引先
振替取引の場合は、取引の相手先となる口座の名称が入ります。例えば、B列に"振替支出"が入り、D列に"その筋銀行"、E列に"女房の財布"が入っている場合は、"その筋銀行"から"女房の財布"への振替(一般的には現金引き出し)取引となります。
支出・収入取引の場合は、取引の相手先となる企業や店舗名が入ります。 -
F列=支出、G列=収入
取引の金額が入ります。両方に金額を入れることはできず、片方は必ず0でなければなりません。なお、支出欄・収入欄共にマイナスの金額を入れられますが、家計簿ソフト/アプリによってはそのようなデータを受け付けられないこともあります。 -
H列=内容
一般的な家計簿では「品名」という項目ですが、筆者はサービス的なものも対象という考えから「内容」としています。 - I列=メモ
取引に関するメモが入ります。 -
J列=計算対象
家計簿アプリにおいて、個々の取引を収支計算の対象にするか否かを選択するフラグに相当し、0・1のいずれかが入ります。0の場合は計算対象外、1の場合は計算対象です。 -
K列=振替フラグ
0の場合は収入・支出取引、1の場合は振替取引、2の場合はMFFマクロが家計簿アプリのデータをMFF形式に変換する際にでっち上げた振替取引であることを示します(この処理については後述します)。また、MFFマクロの内部処理の過程では3・4という値に一時的になることがありますが、その説明は割愛します。MFFマクロは、B列(費目甲)の中身では無く、このフラグにより振替取引かどうかを判断します。 -
※L・M列=ACF機能用
ACF:Account and Category Fixer機能を作動させるときに作業用に予約している列です。 -
※N列=計算対象支出
F列×J列の値が入ります。N1セルには縦サムが入ります。 -
※O列=計算対象収入
G列×J列の値が入ります。O1セルには縦サムが入ります。 -
P列=ID
一部の家計簿アプリ(マネーフォワード、Dr.Wallet等)に実装されている、取引データの個別IDを格納する列です。P1セルには、O1-N1の値が入ります。
※印は、厳密にはMFF形式のデータには含まれません。MFFマクロの動作上、またはユーザーの利便上の必要により使用しているデータ列です。
3.MFFマクロのデータ変換処理の概要
以上を踏まえて、MFFマクロがどのようにデータを変換しているのか、を解説します。
(1)家計簿アプリ→MFF形式のデータ変換
_当Blogでは、家計簿アプリのベンチマークとしてPC家計簿ソフト"マスターマネー"を据えております。その理由は別途述べますが、とりあえずマスターマネーからエクスポートしたデータをMFF形式に変換するときの処理を当Blog流に図解すると↓のようになります。まずは収入・支出取引から。

_↑マスターマネーは、実は数多ある家計簿アプリの中では最もデータ項目が少ない部類にあたり、ユーザーが自由記入できるのが"メ モ"欄1つだけであり、ここに取引に関する情報を全て入力するという運用になります。
_そのため、MFFマクロでは、マスターマネーのメモ欄に"品名@お店※メモ"という書式(MFF書式と呼びます)で入力しておけば、MFF形式に変換した際に、品名→MFF形式の内容欄、お店→MFF形式の取引先欄、メモ→MFF形式のメモ欄 のように、然るべき欄に分解して入れる機能を備えています。
_なお、この書式は、先頭に無印で品名を入れる(空欄でも良い)という一点を除けば、順不同で省略も可能です。すなわち、"@お店※メモ"、"品名※メモ"、"@お店”等でも解釈できるようになっています。これは他の家計簿アプリとのデータ変換機能においても実装しています。
_次に、振替取引(マスターマネーでは"資金移動"という)の場合です↓。

_MFFマクロの大きな特徴として、このような"口座A→口座B"の振替取引の場合に、"口座B←口座A"という逆の取引のデータを生成するようにしている点が挙げられます。当Blogではこの処理を「反対取引をでっち上げる」と表現しています。でっち上げた振替取引データには、振替フラグに"2"が入ります。ただし、家計簿アプリのデータが単一の口座のみで構成されている場合には、MFFマクロはでっち上げ処理を行いません。また、振替取引は、通常は家計の収支計算の邪魔になるので、計算対象フラグに"0"を入れています。
_この機能は、MFF形式に変換後、D列=口座名で絞り込んだ場合に、口座Aで絞り込んでも、口座Bで絞り込んでも、出納が正しく表示されるようにするために設けました。家計簿アプリの中には、こういった口座間でのお金のやりとりを記帳する機能が無いものもあって、その場合は 口座Aからの支出 と 口座Bへの収入 を同日同額で記帳しなければならないので、そういった処理が手間無くできるようにする目的もあります。
_ただし、このMFF形式データを、さらに別の家計簿アプリ向けに変換する際には、この「でっち上げた」反対取引はダブリの原因にもなります。そのため、MFFマクロでは、変換先の家計簿アプリ側で振替取引を記帳できる場合、振替フラグに"2"が入っている取引データを無視するようにしています。
(2)MFF形式→家計簿アプリのデータ変換
_次に、MFF形式のデータをマスターマネーへのインポート用に変換するときの処理を図解します。まずは収入・支出取引から↓。マスターマネーは情報を自由記入できるのがメモ欄のみであるため、MFF形式の取引先・内容・メモ欄の中身を"内容@取引先※メモ"のように連結して記帳できるようにしています。前述した機能の反対の処理ですね。

_振替データの場合↑、マスターマネーは「カテゴリー」欄に所定の書式で文字列を入れなければ、インポートした際にこのデータが資金移動の取引であると認識できません。そこで、MFF形式のB列=費目甲に入っている"振替支出"/"振替収入"の文字列に応じて、変換先の家計簿アプリが認識できるようにデータ変換を行います。
_なお、マスターマネーには"グループ”という一種のタグ付け機能があるのですが、MFFマクロでは無視しています。他の家計簿アプリでは、この機能を実装していないものが多数派であるためです。このように、MFFマクロは残念ながら「全ての家計簿アプリの全ての機能を網羅する」という具合には作ってはおりません。
_マスターマネー以外の家計簿アプリでオミットした機能の代表例としては、底値管理をするために使用する「単価」×「数量」や、「税率」といったものがあります。どのような機能を活用し、どのような機能を省略したかについては、個々の家計簿アプリとのデータ変換の処理内容を解説する中で述べます。