Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 带有索引/匹配和逻辑测试的返回值_Excel_Excel Formula - Fatal编程技术网

Excel 带有索引/匹配和逻辑测试的返回值

Excel 带有索引/匹配和逻辑测试的返回值,excel,excel-formula,Excel,Excel Formula,我有一个表,它的行中显示了唯一的值。我需要返回当天正确的首次登录时间的值 A B C D 1 Session User Date Time 2 1000 U1 3/6/2017 10:01 3 1234 U1 3/6/2017 12:00 如您所见,一个代理一天可以登录两次,我只需要第一次登录 我想我可以使用索引并与用户和日期的

我有一个表,它的行中显示了唯一的值。我需要返回当天正确的首次登录时间的值

     A        B         C            D
1    Session  User      Date         Time
2    1000     U1        3/6/2017     10:01
3    1234     U1        3/6/2017     12:00
如您所见,一个代理一天可以登录两次,我只需要第一次登录

我想我可以使用索引并与用户和日期的多个条件匹配,但是如何包括逻辑测试来检查编号较低的会话(以后的会话总是具有较高的会话ID号)

到目前为止,我的公式如下所示:

=INDEX(A:D,MATCH("U1"&"3/6/2017",B:B&C:C,0),D:D)
我实际上没有直接使用U1和日期,而是使用单元格引用,因此语法错误不是问题

另外,我知道这是一个数组公式,所以用Ctrl+Shift+Enter确认


然而,我不知道如何继续从这里说检查U1在B:B和日期在C:C,但只返回D;D对于A:A

中的最低会话,您可以包含一个额外的helper列
isFirstLogin
,公式如下:

=COUNTIFS($B:$B,$B2,$C:$C,$C2,$A:$A,"<"&$A2)=0
=COUNTIFS($B:$B,$B2,$C:$C,$C2,$A,”试试

这将检索所提供日期的最低数字会话编号,然后在类似的包装公式中使用该编号检索与会话、用户和日期关联的时间。请记住将结果格式化为时间;它最初将作为原始编号检索


“U1”
日期(2017,3,6)
可以指包含该值的单元格。对于第二个、第三个等匹配项,请替换
、1)
(聚合的小子函数的k)使用适当的顺序。

你本能地使用
索引和
匹配
是正确的。如果它们按时间顺序排列,则不需要找到最小值,只需找到第一次出现的值-这正是
匹配
所做的

=INDEX($B$2:$B$3,MATCH(G2&H2,$C$2:$C$3&$D$2:$D$3,0))
作为数组公式输入(Ctrl+Shift+Enter,而不仅仅是Enter)

结果如下所示(请参见列
I


将其作为数组公式输入(用Ctrl+Shift+Enter确认):


事实上,它只是获取初始函数的最小值,并将其与用户和日期匹配,以获得所需的结果!;)

作为公式的替代方法,您可以创建一个数据透视表,自动显示每个用户每天第一次登录的会话号和时间,而不考虑数据顺序:

  • 插入数据透视表
  • 将用户、日期和会话添加到行标签(您可以交换用户和日期,但会话必须是最后一个)
  • 为值添加时间
  • 按最小值总结时间(如果会话是唯一的,Sum/Max实际上有相同的结果,因为每个会话只有一个值。这里的最小值听起来更好。)
  • 将时间最小值字段的数字格式更改为时间(右键单击字段、值字段设置、数字格式、时间)
  • 将报表布局更改为表格格式(在“数据透视表工具”>“设计”选项卡上)
  • 更改报告布局以重复所有项目标签
  • 删除小计
  • 删除总计
  • 右键单击会话字段并选择过滤器>前10名
  • 设置为:按时间最小值显示底部1个项目(这将导致基于最早时间的每个用户/日期组合仅显示第一个会话)

  • 到目前为止,请包括您的公式。您可以使用
    MIN()
    查找最低值,即最早的一小时!)您好。到目前为止,我的公式如下:
    =索引(A:D,匹配(“U1”和“3/6/2017”,B:B&C:C,0),D:D)
    。实际上,我没有直接使用U1和日期,而是使用单元格引用,因此语法错误不是问题。此外,我知道这是一个数组公式,因此可以使用Ctrl+Shift+Enter进行确认。但是,我不知道如何从这里继续说
    在B:B中检查U1,在C:C中检查日期,但对于a:a中的最低会话,只返回D;D。在完成OP的所有编辑之后,我相信他/她实际上想要与用户相关联的时间、日期和最低会话数,因此可能需要更多级别的查找。如果是这种情况,OP可以将
    索引($B$2:$B$3,
    更改为
    索引($E$2:$E$3,
    ?所有这些都假设结果是按时间顺序出现的。非常感谢,Michael。不幸的是,pivot对我不起作用,因为我需要在另一个表中使用提取的值来匹配计划时间。这很完美-我喜欢简单的解决方案。谢谢你,Taosique!
    =INDEX($B$2:$B$3,MATCH(G2&H2,$C$2:$C$3&$D$2:$D$3,0))
    
    =INDEX(A:D,
        MATCH(
            MIN(INDEX(A:D,MATCH("U1"&"3/6/2017",B:B&C:C,0))&"U1"&"3/6/2017"
            ,D:D&B:B&C:C,0)
            ,D:D)