我在左边有一个银行登记簿。我想要一个右侧的代码来告诉我该月支付“租金”描述的所有时间。我尝试过 index、sumproduct 和 sumif。我找不到按月、年和文本搜索的正确方法。
2 回答
目前尚不清楚您的表格是什么格式。
SUMIFS
是最简单的解决方案,但只有在银行登记使用 Excel 日期格式时才有效。如果这些日期被格式化为文本,它会变得有点复杂。
构建SUMIFS
公式从 SUM RANGE 开始。这是一个远离向后结构和错误命名的可喜变化(如果你问我SUMIF
,看起来更像是一个)IFSUM
=SUMIFS(SUM RANGE, CRITERIA 1 RANGE, CRITERIA 1, CRITERIA 2 RANGE, CRITERIA 2, CRITERIA 3 RANGE, CRITERIA 3...)
使用您的示例:
SUM RANGE
,银行寄存器的“借方”列 (BankRegisterDebitRange)CRITERIA 1 RANGE
, 银行寄存器的“描述”列 (BankRegisterDescriptionRange)Criteria 1
,字符串“租金”Criteria 2 Range
,银行寄存器的“日期”列 (BankRegisterDateRange)Criteria 2
, 这个公式字符串">="&EOMONTH(RentTableDate,-1)+1
Criteria 3 Range
,银行寄存器的“日期”列 (BankRegisterDateRange)Critera 3
, 这个公式字符串"<="&EOMONTH(RentTableDate,0)
把它放在一起:
=SUMIFS(BankRegisterDebitRange, BankRegisterDescriptionRange, "Rent", BankRegisterDateRange, "=>"&EOMONTH(RentTableDate, -1)+1, BankRegisterDateRange, "<="&EOMONTH(RentTableDate, 0))
如果您的数据格式为文本,那么您需要决定是否要使用辅助列或是否需要单个公式。如果您想使用SUMIFS
简单的公式或执行其他分析,则可能需要辅助列。如果您不想要帮助列,则可能需要使用不同的基于数组的公式,例如SUMPRODUCT
or SUM
。
已经有很好的答案展示了如何使用,所以这里有一个示例,说明如何在数据格式为文本时SUMPRODUCT
构建数组公式。SUM
=SUM((BankRegisterDebitRange)*(BankRegisterDescriptionRange="Rent")*(DATEVALUE(BankRegisterDateRange)=>(EOMONTH(RentTableDate,-1)+1))*(DATEVALUE(BankRegisterDateRange)<=MONTH(RentTableDate,0)))
这是一个真正的数组公式,必须使用 Ctrl + Shift + Enter 输入
我在测试期间对我的一些结果感到惊讶。主要是 Excel 如何在某些情况下仍将文本视为日期,但在其他情况下则不然。例如,DATEVALUE
在银行登记方面需要,但租表不是这种情况,因为EOMONTH
没有它也可以正常工作。我相信这与另一个奇怪的行为有关:当我在其中创建一个文本格式的单元格A1
然后输入一个日期时,无论它前面是否有撇号,然后如果我输入=A1+1
任何其他单元格,该单元格就会被格式化为文本并显示 Excel 中日期后一天的数值A1
。我所期望的是一个#Value!
错误。我怀疑这就是EOMONTH
避免疯狂的原因,并且数组的神秘本质以某种方式阻止了这种行为延续到SUMIFS
...但我真的不知道为什么会这样。
假设您有以下命名范围:
- BankDate是您的银行登记表中的日期列;
- Desc是您的银行登记表中的描述列;
- Dr是您银行登记表中的借方列。
如果查找日期为text
,则可以使用以下公式:
=SUMPRODUCT((Desc="Rent")*(TEXT(BankDate,"mmm yyyy")=G2)*Dr)
如果查找日期为date
,则可以使用以下公式:
=SUMPRODUCT((Desc="Rent")*(TEXT(BankDate,"mmm yyyy")=TEXT(G4,"mmm yyyy"))*Dr)
更改G2
或更改G4
上述公式以适合您的实际情况。
逻辑是使用TEXT函数将其转换
BankDate
为与查找日期相同的格式,然后使用SUMPRODUCT函数按月返回租金。
附言。使用SUMPRODUCT可能有点矫枉过正,因为@ProfoundlyOblivious 建议的SUMIFS实际上在 excel 计算中更快。
PS2。正如@ProfoundlyOblivious 所指出的,Excel 中有一个有趣的行为,即在某些情况下将文本日期视为“真实”日期。虽然它可能与这篇文章的问题无关,但我想在这里为任何感兴趣的人分享我的一些测试结果: