excel如何获取指定区域中每行首次出现指定值的位置
发布时间:2023-09-25 06:18:53
给定一个任意大小的单元格区域,其每个单元格中的数据要么是0要么是1,并且每行至少有一个1,要求使用一个公式返回一个数组,该数组由区域每行中第一次出现1的相对列位置组成。例如下图1所示的单元格区域A1:E10,要求返回数组{2;1;1;2;1;5;1;4;1;3}。

图1
注意,公式中可以使用单元格区域A1:E10,但应该适用于任何其他区域。并且,所返回的数组中的元素对应的是区域内的相对列位置,例如将图1中的区域替换成H1:L10不应该影响公式的结果。
先不看答案,自已动手试一试。
公式
下面列出了各种解决上述问题的公式。
公式1:
=COLUMNS(A1:E10)-INT(LOG(MMULT(A1:E10,2^(COLUMNS(A1:E10)-ROW(INDIRECT(“1:”&COLUMNS(A1:E10))))),2))
公式2:
=COLUMNS(A1:E1)-INT(LOG(MMULT(A1:E10*2^(COLUMNS(A1:E1)-COLUMN(A1:E1)),TRANSPOSE(A1:E1*0+1)),2))
或:
=COLUMNS(A1:E10)-INT(LOG(MMULT(A1:E10,2^TRANSPOSE(COLUMNS(A1:E10)-COLUMN(A1:E10)+MIN(COLUMN(A1:E10))-1)),2))
公式3:
=MATCH(1,(OFFSET($A$1,ROW($A$1:$A$10)-1,,,COUNTA($A$1:$E$1))),0)
公式4:
=FIND(1,TEXT(MMULT(A1:E10*10^(COLUMNS(A1:E10)-COLUMN(A1:E10)+MIN(COLUMN(A1:E10))-1),TRANSPOSE(COLUMN(A1:E10)^0)),REPT(0,COLUMNS(A1:E10))))
或:
=FIND(1,TEXT(MMULT(A1:E10,TRANSPOSE(10^(COUNT(A1:E1)-COLUMN(A1:E1)))),REPT(“0”,COUNT(A1:E1))))
或:
=FIND(1,TEXT(MMULT(A1:E10,10^(COLUMNS(A1:E10)-ROW(INDIRECT(“1:”&COLUMNS(A1:E10))))),REPT(0,COLUMNS(A1:E10))))
公式5:
=MOD(SMALL(IF(A1:E10=1,ROW(A1:E10)*10^5+COLUMN(A1:E10)-MIN(COLUMN(A1:E10))+1),SUBTOTAL(9,OFFSET(A1,,,ROW(A1:E10)-MIN(ROW(A1:E10))+1,COLUMNS(A1:E10)))-MMULT(A1:E10,TRANSPOSE(COLUMN(A1:E10)^0))+1),10^5)
或者将数据区域命名为Data:
=MOD(SMALL(IF(Data=1,ROW(Data)*10^COLUMNS(Data)+COLUMN(Data)-MIN(COLUMN(Data))+1),SUBTOTAL(9,OFFSET(Data,,,ROW(Data)-MIN(ROW(Data))+1,COLUMNS(Data)))-MMULT(Data,TRANSPOSE(COLUMN(Data)^0))+1),10^COLUMNS(Data))
公式6:
=MATCH(ROW(Data),INDEX(Data*ROW(Data),N(IF(1,1+(INT((COLUMN(INDEX(1:1,1):INDEX(1:1,COLUMNS(Data)*ROWS(Data)))-1)/COLUMNS(Data))))),N(IF(1,1+(MOD((COLUMN(INDEX(1:1,1):INDEX(1:1,COLUMNS(Data)*ROWS(Data)))-1),COLUMNS(Data)))))),0)-(ROW(Data)-MIN(ROW(Data)))*COLUMNS(Data)
或:
=MATCH(ROW(Data),INDEX(Data*ROW(Data),N(IF(1,1+(INT((COLUMN(INDEX(1:1,1):INDEX(1:1,COUNT(Data)))-1)/COLUMNS(Data))))),N(IF(1,1+(MOD((COLUMN(INDEX(1:1,1):INDEX(1:1,COUNT(Data)))-1),COLUMNS(Data)))))),0)-(ROW(Data)-MIN(ROW(Data)))*COLUMNS(Data)
公式7:
=ROUND(COLUMNS(A1:E1)+1-ROUND(MOD(LARGE(ROWS(A1:E10)-ROW(A1:E10)+1+(10^-7*A1:E10*(COLUMNS(A1:E1)-(COLUMN(A1:E1)-COLUMN(A1)))),1+((ROW(A1:E10)-ROW(A1))*COLUMNS(A1:E10))),1),7)*10^7,0)
公式8:
=-INT(LOG(MMULT(Data,2^-ROW(OFFSET(A1,,,COLUMNS(Data)))),2))
或:
=-INT(LOG(MMULT(Data,TRANSPOSE(2^-COLUMN(Data))),2))
扩展:
1. 每行的第一个正值的位置(数据中没有负值)
=-INT(LOG(MMULT(SIGN(Data),10^-ROW(OFFSET(A1,,,COLUMNS(Data)))),10))
2. 每行的第一个正值的位置(数据中可能有负值)
=-INT(LOG(MMULT(–(Data>0),10^-ROW(OFFSET(A1,,,COLUMNS(Data)))),10))
3. 每行的第一个非零值的位置
=-INT(LOG(MMULT(–(Data<>0),10^-ROW(OFFSET(A1,,,COLUMNS(Data)))),10))
4. 每行中指定的数据第一次出现的位置
=IFERROR(-INT(LOG(MMULT(–(Data=”指定数据”),10^-ROW(OFFSET(A1,,,COLUMNS(Data)))),10)),0)
公式9:
=MATCH(1,INDEX(Data,ROW(Data)-MIN(ROW(Data))+1,),)
公式10:
=–RIGHT(TEXT(MMULT(Data*10^(-COLUMN(Data)+MIN(COLUMN(Data))-1),TRANSPOSE(COLUMN(Data)^0)),”0E+000″),3)


猜你喜欢
- Excel表格使我们日常中经常使用的办公软件,如果我们需要在Excel中制作不规则表格,该怎么办呢?今天,小编就教各位Excel中制作不规则
- MacBook Pro位于键盘顶部的触控栏(Touch Bar),它已经开始在改变我们使用以往键盘的习惯,使键盘更快捷也能更好的辅助我们使用
- 表格如何行列互换?制作表格的时候需要行列互换,不用重新制作表格,有了转置功能,超便捷,一个简单的操作即可完成。1、复制单元格后,右键选择性粘
- 在Word2010文档中,如果链接文件的名称或位置发生变化,则用户可以根据实际需要更改链接文件的链接地址或数据范围。在Word2010文档中
- 根据苹果官方提供的信息,在 iOS 15 中,我们可以看到 Safari 浏览器的全新变化和改进,包括新的标签栏设计,可轻松切换的标签组选项
- 很多人喜欢用无线网络,少了根电线的牵绊,win10可以手动添加无线网络,打开网络和共享中心,选择手动连接到无线网电脑技术发展很快,导致无线网
- vba引用工作表是我们在学习VBA过程中很常用。本文提供三种vba引用工作表的代码,通过这三种方式都可以实现vba引用工作表名。方法一:Sh
- Win10忘记密码怎么办?当然你可以用PE来破解Win10密码。但是Win10的登录方式跟以前不大一样,因为Win10是用微软账户登录的。所
- 省略号是日常使用频率较高的几种符号之一,本文总结了word中省略号三种打法。Word中省略号怎么打之快捷键将电脑的输入法切换至中文状态,然后
- 我们经常需要在表格中插入迷你图(迷你图包括折线图、柱形图、盈亏3种),如何在表格中插入迷你图呢?那么,今天小编就教各位如何在Excel表格中
- 钉钉是一款非常好用的办公软件,很多公司都在使用钉钉打卡,也有人在钉钉里面聊天,通知事务,你知道钉钉中怎么建立群的吗?接下来我们一起往下看看钉
- Word如何批量删除多余空行?1、不管是什么版本的Word,直接按Ctrl+H就会打开“替换 ”窗口,或者选择开始面板,点击“编辑-替换 ”
- 有传言预测,在本次大会上将会推出新款的 MacBook Pro,而它将搭载最新款的 M 系列芯片。新款 M 芯片将配备 10 核 CPU,可
- 不久前,特斯拉加入RISC-V基金会,并考虑在新款芯片中使用免费的RISC-V设计。至此,已有IBM、NXP、西部数据、英伟达、高通、三星、
- 虚拟内存是电脑中的一种内存管理的技术,它在整个系统中有着十分重要的作用,但是用户有时候也会遇到不得不把他关闭的时候,那么今天就一起来看看他是
- 前面的教程中,小编给大家介绍了抖音直播伴侣如何直播电脑游戏以及如何循环播放视频,很多新用户并不太了解怎么填写推流的操作,接下来小
- 今天,据外媒报道,AdDuplex广告网络发布了Windows 10系统份额2019年1月份统计数据,揭示了Win10各系统版本之间的份额差
- 我们在Win7操作系统上,玩游戏的时候,游戏画面不太流畅。这说明我们的电脑没有启用显卡硬件加速,为了提高显卡的最大效能,我们都会启用显卡硬件
- 让用户第一时间知道Modern应用的最新消息,如果这个通知打扰了你,也可以将它关闭,但会错过已经发布的消息,下面教大家设置免打扰时间,这样就
- 最近有Win10用户在安装编号为KB3122947的更新时,出现更新失败,并且提示0x80070643错误代码的情况。这让用户非常困恼。那么