用Excel做日记账本,核心不在于“记录”,而在于“如何让记录自动化并产生有价值的分析”。如果只是单纯打字输入,那它跟记事本没区别。
一、日记账必要的一些基础资料
1、账户类型
普通个人的资金账户一般包含:微信、支付宝、银行卡,可以将每个存储个人资金的地方都视为一个独立账户。方便个人随时核对每个账户的余额与总金额等。
2、收支方向
资金方向可以划分为:收入、支出、借出、收回借款,根据这些信息,可以统计一段时间内的收支情况。
3、支付类型
支付类型主要指个人平时的消费类别,比如餐饮、工资、购物、交通、房租等项目,这个类别的多少,可以根据个人情况而定。
4、账目明细
先期主要记录日期、收支类型、发生账户、收支方向、金额、摘要这些信息,后期根据统计的需要,可以逐渐增加辅助列。
二、对数据表的要求
为了能自动扩展单元格格式、编写公式的方便,所有记录数据的表格都需要按照标准二维表设计,即:不能有合并单元格、不能有多行标题。同时在Excel中,存储这些数据的表格一定要转换为超级表,Excel的超级表是一个非常好用的东西。用好它,很多时候不用写VBA了。
三、账目明细表的数据验证
账目明细表中的发生账户、收支类型、收支方向不要手动输入,而是采用数据验证的方式,通过下拉列表让用户做选择,避免出错。
如果发生账户、收支类型、收支方向有增减时,只需在对应的超级表里去增减即可,即“这些列的数据来源于另外的一个超级表中”。
四、完成表的设计
1、创建一个工作表,名为“基础数据”
其中包含3张超级表,用于记录收支类型、账户、收支方向这些信息。

根据个人需求,在“基础数据”表中创建如上数据表。注意不同类型的数据表之间至少要空出一列。
然后将它们分别转换为“超级表”,以“收支类型”为例:


用同样的方法,分别将“方向”列创建为名称为“收支方向”的超级表、将“账户”列创建为名称为“账户”的超级表。
2、创建一个名为“账目明细”的工作表
A. 并输入如下图所示的标题行(也叫字段行)。

B. 选择日期单元格,按Ctrl+T,创建一个名称为“明细”的超级表。如下图所示:

C. 选择A2单元格,将格式设置为日期型。
D. 选择B2单元格,创建数据验证,如下图所示:

这样每,将来录入数据时,收支类型就可以通过右侧的下拉列表进行选择了,以防止数据录入出错导致统计不正确。上图对话框中的【来源】里填写如下公式,表示“数据来源于收支类型超级表中的类型列”。
=INDIRECT("收支类型[类型]")E. 选择C2单元格,创建数据验证,来源为:
=indirect("账户[账户]")F. 选择D2单元格,创建数据验证,来源为:
=indirect("收支方向[方向]")五、完成第1个简单的逻辑
1、添加测试数据
在账目明细表中添加几条测试数据,当然也可以填入你的真识数据。
我用DeepSeek生成了60条模拟数据放进了账目明细表中,方便后期的逻辑实现。

2、实现账户超级表的基础逻辑
切换到【基础数据】表,并在账户表后面添加新列【余额】,这一列用来存储当前账户的余额。(你只需在后面打字即可自动套用格式,这就是为什么要用超级表的原因之一)
编写余额计算公式。以微信账户为例:
微信余额 =初始金额 +微信收入明细 -微信支出明细 -微信借出明细 +微信收回借款明细
=[@初始金额] +SUMIFS(明细[金额], 明细[发生账户], [@账户], 明细[收支方向], "收入") -SUMIFS(明细[金额], 明细[发生账户], [@账户], 明细[收支方向], "支出") -SUMIFS(明细[金额], 明细[发生账户], [@账户], 明细[收支方向], "借出") +SUMIFS(明细[金额], 明细[发生账户], [@账户], 明细[收支方向], "收回借款")


夜雨聆风