excel - 计算每个客户多次输入的总停留时间

标签 excel excel-formula

我有一个包含 2 个电子表格的 Excel 文件。第一个电子表格(“masterlist”)包含 4 列的 masterlist:

<表类="s-表"> <头> 客户ID 签到 结帐 持续时间 <正文> 1 2020/9/1 2020/9/3

客户可能有多个条目,因为他们可以多次 checkin 和 checkout 。总共有数千条记录/行。

第二个电子表格(“信息表”)仅包含来自 masterlist 的唯一客户并且是结构化的:

<表类="s-表"> <头> 客户ID 总持续时间 <正文> 1

我的最终目标是计算每位客户的总停留时间

为了计算“masterlist”中的 Duration,我做了一个简单的 if 语句公式:

=IF(checkout=checkin,1,checkout-checkin+1)

if语句,因为如果checkin和checkout是同一天,客户仍然被认为停留了1个日历日。在 false 情况下加 1 是为了说明相同的完整日历日。因此,在 9/1-9/3 期间停留总共应获得 3 天。

长话短说,我最终得到了一个公式,该公式为“信息表”的 Total_Duration 读取以下内容:

=SUMIF(masterlist!$A:$A,A2,masterlist!$D:$D)

问题是使用我的逻辑做出的多个假设最终导致多条记录出错。 如果客户有以下两条记录:

<表类="s-表"> <头> 签到 结帐 持续时间 <正文> 2020/9/1 2020/9/3 3 2020/9/3 2020/9/5 3

我的公式计算停留时间为 3 天,在“信息表”中,总停留时间显示为 6 天。正确的结果应该是 5 天,因为我们不应该将 9/3/2020 计算两次。

我的公式也没有考虑下面的情况:

<表类="s-表"> <头> 签到 结帐 持续时间 <正文> 2020/9/1 2020/9/3 3 2020/9/3 2020/9/3 1 2020-10-1 2020/10/3 3 2020/10/3 2020/10/3 1

虽然孤立地计算持续时间是正确的,但 SUMIF 会给我们总持续时间 8 天。实际上,9/3-9/3 和 10/3-10/3 的住宿已经计入 9/1-9/3 和 10/1-10/3 的住宿,因此不应该计入再次计算,总持续时间应该是 6 天。

我完全不知道下一步应该做什么。我如何在我的公式中考虑这些例子?我应该如何操作数据/更改或添加列以使其更容易?

提前致谢!

最佳答案

我们可以使用 Sequence 创建一个从最小日期到最大日期的天数数组,并使用 COUNTIFS 来查找它们是否在范围内。

=LET(
    ID,A:A,
    ckin,B:B,
    ckot,C:C,
    ids,F2,
    mn,MINIFS(ckin,ID,ids),
    mx,MAXIFS(ckot,ID,ids),
    sq,SEQUENCE(mx-mn+1,,mn),
    SUMPRODUCT(--(COUNTIFS(ckin,"<="&sq,ckot,">="&sq,ID,ids)>0))

enter image description here

关于excel - 计算每个客户多次输入的总停留时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68625907/

相关文章:

database - 遵守数据模型协议(protocol)的优势

vba - 如何在Excel中匹配多列并获取值

excel - 如何将 Excel M365 中多维动态数组的一部分与特定值的条件求和?

Excel (2007) VBA - .Formula 包含引号

excel - 将多个文本文件导入 Excel

Excel 多个 IF 语句或宏可以解决这个问题吗?

vba - 如何删除隐藏的引号

arrays - 是否可以创建一个 Excel 数组公式,其中每个元素 n 是另一个数组的前 n 个元素的总和?

java - 将java表导出到excel时出现问题

excel - SSIS在有数据时将列读取为NULL