【问题标题】:Creating an excel cell that resets at the start of every month创建一个在每个月初重置的 Excel 单元格
【发布时间】:2025-12-19 21:15:07
【问题描述】:

我正在尝试创建一个 Excel 单元格,告诉我是否有人支付了当月的租金。因为租金是按月计算的,所以我希望单元格在每个月初重置为 False 并保持这种状态,直到有人将其更改为 true,之后在新的月份再次重置为 false。

我已经尝试通过创建以下单元格函数=if(Day(Today())==1, False, True) 来使用日期和时间函数,但是这样做的明显问题是该单元格在该月的第一天之后不会保持 False。我应该如何解决这个问题?还有其他我应该使用的 Excel 函数吗?

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    听起来您正在寻找 2 张桌子。

    1. 显示租户、付款和日期的分类帐表
    2. 显示摘要信息的租户表,让您知道他们是否还没有支付当月费用

    下面的示例表

    账本

    +--------+------------+------------+
    | Tenant |  PaidDate  | PaidAmount |
    +--------+------------+------------+
    | Paul   | 2015-06-01 | $750       |
    | Peter  | 2015-06-15 | $600       |
    | Mary   | 2015-06-29 | $500       |
    | Paul   | 2015-07-01 | $750       |
    | Peter  | 2015-07-15 | $600       |
    | Mary   | 2015-07-29 | $500       |
    | Paul   | 2015-08-01 | $750       |
    +--------+------------+------------+
    

    租户

    +--------+------------+
    | Tenant |  LastPaid  |
    +--------+------------+
    | Peter  | 2015-07-15 |
    | Paul   | 2015-08-01 |
    | Mary   | 2015-07-29 |
    +--------+------------+
    

    Tenant 表中的LastPaid 列是一个计算列,它使用公式=AGGREGATE(14,6,ledger[PaidDate]/(ledger[Tenant]=[@Tenant]),1)(在线信息aggregate()here)指向Ledger 表,但基本上这从租户的分类帐表)。这假设您已将构建表格式化为数据表(使用 ctrl + t )并将它们重命名为“租户”和“分类帐”(使用 alt + j + t + i)。

    在那之后你有几个选项,但最简单的可能是租户表上的条件格式选项( alt + h + l + n )。当表格从单元格A1 开始时,我使用了=$B2<DATE(YEAR(TODAY()),MONTH(TODAY()),1)。毕竟,它最终看起来像下面

    如有任何问题,请随时发表评论或通过任何更新修改 OP。希望这会有所帮助!

    【讨论】:

    • 或者,您可以将帮助列“LastPaid”和条件格式放在分类帐表上,但从视觉上讲,这最终会有点混乱。我想我想这取决于你的喜好,而不是我的。 :-)
    【解决方案2】:

    我还没有测试保存/获取设置方法...但它可能适用于您的应用程序。如果您有任何 VBA 经验,您可能会找出出现的任何问题。如果没有,请发表评论,我会尽力提供帮助。

    sub datechecker()
    
    dim y as byte
    dim x as byte
    
    
    
    on error resume next
        y = getsetting("myapp","settings","mysetting1")
        x = day(now)
            if y > x then
                'change the range to match the cells that should be changed to false
                ThisWorkbook.Worksheets("Sheet1").Range("D1:D300") = "False"
            end if
        y = x
        savesetting ("myapp", "settings", "mysetting1", y)
    
    end sub
    

    链接: 如有必要,如何修改您的范围:http://excelmacromastery.com/Blog/?p=165 日期和时间变量:http://www.classanytime.com/mis333k/sjdatetime.html 分配变量:What does the keyword Set actually do in VBA?

    【讨论】:

      最近更新 更多