楼主 天南地北 |
Q:如何统计单行或者单列连续出现同一字符的最大次数? A:可以使用如下数组公式实现
第一步: =(IF(B4:AF4="","~",B4:AF4)<>TRANSPOSE(B4:AF4))*10^COLUMN(A:AE) 构建31*31的数组,通过数据源和转置后的数据源比较是否一致来构造,然后乘以10的1-31次方 第二步:=N(COLUMN(B:AF)>ROW($1:$31)) 构建一个跟第一步同样大小的数组,用于辅助计算第一步所得数组的矩阵的乘积,此数组构造为我们常用的数据逐行或逐列累加的构造一致 第三步:=MMULT((IF(B4:AF4="","~",B4:AF4)<>TRANSPOSE(B4:AF4))*10^COLUMN(A:AE),N(COLUMN(B:AF)>ROW($1:$31))) 计算两个数组的矩阵乘积,也就是按列逐步累加,结果如下 第四步:=INT(LOG(MMULT((IF(B4:AF4="","~",B4:AF4)<>TRANSPOSE(B4:AF4))*10^COLUMN(A:AE),N(COLUMN(B:AF)>ROW($1:$31)))+1)),在第一步中我们通过指数形式返回数据,这一步我们将通过对数对矩阵的乘积进行还原,+1是为防止LOG0出现错误,其中1可以为大于等于1,小于10(因为此处是以10为底数),到这里我们已经看到了频率计数的雏形 最后一步: 用COLUMN(A:AE)-上面生成的数组,然后取频数最大值即可,马到成功 =MAX(COLUMN(A:AE)-INT(LOG(MMULT((IF(B4:AF4="","~",B4:AF4)<>TRANSPOSE(B4:AF4))*10^COLUMN(A:AE),N(COLUMN(B:AF)>ROW($1:$31)))+1))) PS:如果大家还是看不懂,可以尝试将31*31改成10*10来分步理解可能更好理解了 如何统计单行或者单列连续出现同一字符的最大次数.rar |