1.您好,我是Excel新手,需要一些帮助。在“已送达”选项卡中,我需要根据“已送达”选项卡中的ID与“呼叫”选项卡中的ID的匹配情况,使用“呼叫”选项卡中的“已应答”和“日期/时间”列填充“已应答”和“已应答日期/时间”列。例如:对于第一行:ID:C763 G。我应该为Answered列获取M,为Date/Time Delivered列获取8/19/2021 11:29:00 PM。第1行的正确返回值以黄色突出显示。但我需要能够为其余行执行此操作。
交付选项卡
呼叫选项卡
我尝试过索引、匹配、min等的各种组合。
=INDEX(Calls!D2:D26,MATCH(MIN(ABS((Calls!B2:B26=B2)*(Calls!C2:C26-C2))),ABS((Calls!B2:B26=B2)*(Calls!C2:C26-C2)),0))
给出了错误的结果。Y而不是M。使用相同的公式,但将索引列更改为日期/时间列,它给我的是11/29/2019 12:39:36 AM,错误的日期和时间,而不是正确的8/19/2021 11:29:00 PM。
我也试过
=IFERROR(SMALL(IF((Calls!B2:B26=B2)*(Calls!C2:C26<=C2),Calls!C2:C26),1),"No Match")
以及
=MIN(IF((Calls!B2:B26=B2)*(Calls!C2:C26<=C2),Calls!C2:C26))
但这又给了我错误的结果。
感谢您提供的任何帮助。
3条答案
按热度按时间xesrikrc1#
imzjd6km2#
这里你不能使用近似搜索,例如通过
XMATCH/MATCH
,因为最近的可能在两个方向上,大于或小于,所以我们需要找到绝对差的最小值。它不能使用MAXIFS
,因为它是一个RACON function,当我们调用一个范围内的操作时,例如ABS
,它不再是一个范围。这是一个数组版本(* 公式1*),它生成整个结果,* 假设对于任何查找ID您都可以找到数据 (如果此假设无效,请检查 * 下面的公式2)。
由于要查找的日期可能是完全匹配的,因此我们不能使用以下内容:
因为没有办法区分最小差值何时为零,因为它与为不等于
id
的子集找到最小值的情况完全匹配。这就是我们使用XLOOKUP
的原因。基本上它是在每次
MAP
迭代时,它首先过滤以查找给定id
的日期子集(并将其命名为f
)。现在,我们为该特定子集找到与d
相差最小的日期。MAP
的结果命名为dates
。最后,我们只需要确定与找到的日期匹配的行,我们使用CHOOSEROWS
来完成这个任务,但是您也可以使用INDEX
,如下所示:这是个人喜好的问题。对于给定查找ID没有数据的情况。例如,行
5
(ID为D
)来自上一屏幕截图中的查找数据(注意在 * 公式1* 中范围结束于行4
),formula 1
产生错误。为了防止它,对于更一般的情况,可以使用以下公式(* 公式2*):这里我们使用这个函数的第三个输入参数来检查
FILTER
是否为空集,因此如果出错,它将返回空字符串。IF(@f="", "",...)
也特别处理这种情况返回一个空集。然后为了返回输出,我们使用一个IF
条件将这种情况处理为"ID not found"
。其余的都差不多。注意:这里我们需要使用INDEX
,因为CHOOSEROWS
会产生一个错误。下面是输出:
68bkxrlz3#
我将假设要求是按ID和日期进行匹配,尽管交付可能是呼叫后的第二天(午夜)
并且给定的ID在一天内不被重用。
在Calls中,向左插入一个rowA(因为VLOOKUP只能查看右侧,而不能查看左侧)。
在A2中输入
=C2&"_"&INT(D2)
并向下拖动。这就给了我们一把可以匹配的钥匙。
在“已交付”中,我们可以在右侧进行额外关闭。
在G2中输入
=$B2&"_"&INT($C2)
,在H2中输入=$B2&"_"&INT($C2)-1
并向下拖动。我们从Delivered(注1)开始查找,因此Call可能是一天
earlier
。然后在E2
=IFERROR(VLOOKUP($G2,Calls!$A:$E,4,FALSE),VLOOKUP($H2,Calls!$A:$E,4,FALSE))
中,即尝试匹配ID和日期;如果不匹配,则尝试ID和前一天。将该公式复制到D2,并将4改为5。
往下拖。
注1:实际上,我建议您考虑一下这是否合适-您将错过任何呼叫没有交付,这是更有可能存在的比反过来。
注2:$不是绝对必要的,但是它们降低了出错的风险,特别是在进一步复制时。
注3:“_"&不是绝对必要的,但有助于可读性,从而减少错误的机会。