手机版

excel如何获取指定区域中每行首次出现指定值的位置

时间:2021-09-29 来源:互联网 编辑:宝哥软件园 浏览:

给定一个任意大小的单元格区域,其每个单元格中的数据要么是0要么是1,并且每行至少有一个1,要求使用一个公式返回一个数组,该数组由区域每行中第一次出现一的相对列位置组成。例如下图一所示的单元格区域A1:E10,要求返回数组{2;1;1;2;1;5;1;4;1;3}。

图一

注意,公式中可以使用单元格区域A1:E10,但应该适用于任何其他区域。并且,所返回的数组中的元素对应的是区域内的相对列位置,例如将图一中的区域替换成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)最小(列(A1:E10))-1))、2))

公式3:

=MATCH(1,(OFFSET(A $ 1,ROW(A $ 1: A $ 10)-1,COUNTA(A $ 1: A $ 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列(a 1: E10)-最小值(列(A1:E10)) 1)、小计(9、偏移量(a1,行(a 1: E10)-最小值(行(1: e10))1,columns(a1:e10)))-mmult(a1:e10,transpose(column(a1:e10)^0))1),10^5)

或者将数据区域命名为数据:

=mod(small(if(data=1,row(data)*10^columns(data)列(数据)-分(列(数据))1),小计(9,偏移量(数据,行(数据)-分(行(数据))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)* ROW(Data)))-1)/COLUMNS(Data))),N(IF(1,1 (MOD((COLUMN(INDEX(1:1,1):INDEX(1:1,COLUMNS(Data)* ROW(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))))

公式7:

=圆形(列(a)1: E1)1圆形(大(行(a 1: E10)-行(a)1: 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((data0),10^-row(offset(a1,columns(data)))),10)

3.每行的第一个非零值的位置

=-int(log(mmult((data0),10^-row(offset(a1,columns(data)))),10)

4.每行中指定的数据第一次出现的位置

=IFERROR(-INT(LOG(MMULT))((数据=)指定数据“),10^-row(offset(a1,columns(data)))),10)),0)

公式9:

=MATCH(1,INDEX(数据,行(数据)-MIN(行(数据))1,)

公式10:

=right(text(mmult(data*10^(-column(data)min(column(data))-1),transpose(column(data)^0)),"0e 000英寸),3)

版权声明:excel如何获取指定区域中每行首次出现指定值的位置是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。