excel学习库

excel表格_excel函数公式大全_execl从入门到精通

如何查找一组数据中第一个大于0的数据的位置

需求

Excel中如何查找一组数据中第一个大于0的数据所在的位置?

原始数据

该数据为某平台不同客户在每天的消费情况。其中A列为账户名称,B-G列为每天的消费。

预期结果

找出每个账户首次消费的日期(第一个大于0的日期)填入H列。

操作步骤

方法一

  • 在H2单元格中输入公式=INDEX($B$1:$G$1,1,MATCH(TRUE,B2:G2>0,0))

  • 按住Ctrl+Shift+Enter执行公式。

  • 将H2中的公式向下拖动,填充其他单元格即可。

方法二

  1. 在H2单元格中输入公式=INDEX($B$1:$G$1,MATCH(1,SIGN(B2:G2),0))

  2. 按住Ctrl+Shift+Enter执行公式。

  3. 将H2中的公式向下拖动,填充其他单元格即可。

公式解析

两个方法原理相通,都是先用match函数找到第一个大于0的数字的位置,然后再用index函数获得对应位置的日期。因此该函数的关键在于如何找到一组数字中第一个大于0的数字。match函数可以获得某值在一组值中第一次出现的位置。下面以方法一H2中的公式为例,逐步拆解:

MATCH(TRUE,B2:G2>0,0)

  • B2:G2>0的结果是一个数组{FALSE,FALSE,TRUE,TRUE,TRUE,TRUE},即B2、C2、D2、E2、F2、G2与0相比较的结果。如果大于0返回TRUE,否则返回FASLE。

  • 所以MATCH(TRUE,B2:G2>0,0)即等价于MATCH(TRUE,{FALSE,FALSE,TRUE,TRUE,TRUE,TRUE},0)表示在{FALSE,FALSE,TRUE,TRUE,TRUE,TRUE}中第一个TRUE的位置,即3。

INDEX($B$1:$G$1,1,3)

  • 该函数表示B1:G1,日期行中第三个日期,即2023/10/3。

  • 至此账户A首次消费日结果已经出来了。

SIGN(B2:G2)

  • SING(正数) 会输出1,SING(负数) 会输出-1,SING(零) 会输出0.

  • 该函数输出的结果其实为数组{0,0,1,1,1,1},相当于将查找首次大于0转换成首次查找1。

总结

该需求实现的核心其实是使用数组将查找大于0这个不太好实现的表达转换成查找某个固定值。其中方法一是转化成查找TRUE,方法二是转化成查找1。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接