给定一个任意大小的单元格区域,其每个单元格中的数据要么是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)