答案1
最好的方法?取决于你想要的结果,而你在问题中没有说明
如果你
- 希望表格按照您显示的方式填写,
- 你说的意思是距离上次访问
DAYS SINCE LAST VISIT
间隔多少天,today
然后,假设 DATE 列中的日期是“真正的 Excel 日期”,而不仅仅是文本字符串:
(使用表格和结构化引用,如果愿意,您可以将其更改为常规寻址):
=TODAY()-MAX(([NAME]=[@NAME])*[DATE])
算法
将公式行上的名称与所有名称进行比较
这将返回一个数组,如果它们匹配,则返回 TRUE,否则返回 FALSE
将每个数字乘以日期。
- 如果为 TRUE,则返回实际日期,否则
0
- 如果为 TRUE,则返回实际日期,否则
结果是与名称匹配的所有日期的数组
从 TODAY() 中减去匹配日期的最大值
您可以
TODAY()
用任何其他日期替换以进行比较。- 如果这样做,我建议您使用输入日期的特定单元格,或者,如果您将其硬编码到公式中,请使用该
DATE
函数以避免由于 Windows 区域设置而产生的歧义。
- 如果这样做,我建议您使用输入日期的特定单元格,或者,如果您将其硬编码到公式中,请使用该
如果这些日期不是真实日期,而仅仅是文本字符串;并且如果 MDY 顺序与窗口区域短日期设置相同,那么要首先将它们转换为真实日期,您可以使用:
=TODAY()-MAX(([NAME]=[@NAME])*SUBSTITUTE([DATE]," ","-"))
如果你的意思还有其他,请更具体一点并提供一个例子。
笔记: 其中一个问题是您还没有明确您想要的结果。
下面的屏幕截图显示了除上面用公式显示的结果之外的几种可能结果。较大的表格是使用 Power Query 生成的。
其他结果是可行的,但您需要详细地决定您真正想要的是什么。
答案2
答案3
使用辅助列和一些数组(CSE)公式解决了该问题:
:警告:
- 下面显示的方法查找自上次访问以来的天数,任何次数的访问。
- 在下面使用的示例数据库中,Alex 有 4 次访问,因此应该计算天数差异在 vist4 和 visit3 之间。
怎么运行的:
对于辅助值,单元格 J2 中的公式为:
=I2&COUNTIF($I$2:$I2,I2)
注意: 这使得查找人员的访问工作更加容易。
单元格 K2 中的 Ar 数组(CSE)公式:
{=IFERROR(INDEX($I$2:$I$10, MATCH(0,COUNTIF($K$1:K1, $I$2:$I$10), 0)),"")}
要查找最后访问日期,请在单元格 L2 中使用数组(CSE)公式:
{=IF(MAX(IF($I$2:$I$10=K2,$H$2:$H$10))=0,"",MAX(IF($I$2:$I$10=K2,$H$2:$H$10)))}
现在单元格 M2 中的最终数组(CSE)公式:
{=IF(IF(L2<>"",L2-LARGE((($H$2:$H$10)*(--($I$2:$I$10=K2))),2))=0,"",(IF(L2<>"",L2-LARGE((($H$2:$H$10)*(--($I$2:$I$10=K2))),2),"")))}
注意:
日期格式为
mm/dd/yy
使用以下方式完成数组(CSE)公式Ctrl+Shift+Enter& 向下填充。
在单元格 M2 中使用带公式的函数时
LARGE
,始终将钾按正确顺序排列的值。=LARGE((($H$2:$H$10)*(--($I$2:$I$10=K2))),2)
在哪里钾th 值
1
查找最新日期,在 ALEX 使用的数据集中,最新日期是06/02/2020
,钾th 值2
查找第二个最新日期,即05/05/20
其他日期也是如此。
您可以根据需要调整公式中的单元格引用。