路灯电缆预留长度:在和值表中查找号码

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 02:58:41
       内容来源于ExcelHome论坛,本人只是进行了整理。通过本例加深了对COUNT函数、TEXT函数、INDIRECT函数和R1C1样式引用的理解,同时对灵活运用ISNUMBER函数有了更深的了解。

       问题是这样的:

       请从下图所示的和值表中查找一个号码,号码顺序不限,比如,图示和值表区域中的“138”,要求不论查找318、381、138、183、813还是831,都能在第10行第4列找到这个号码,并且:

       (1)找出该号码对应的行列号(上面已说了);

       (2)该位置的号码;

       (3)该位置上一行的号码、下一行的号码;

       (4)这3个号码中的不重复号码。

       解决办法如下:

第1个问题。在C29单元格中输入数组公式:{=MAX((SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B4:K25,MID(B29,1,1),"",1),MID(B29,2,1),"",1),MID(B29,3,1),"",1)="")*(ROW(4:25)*100+COLUMN(B:K)))}

解释:在和值表区域B4:K25所有单元格中,逐个单元格进行比较,分别查找所要查找号码中的3个号码(本例中即3、1、8)是否在当前单元格中,如果在其中,则把找到的第1个位置的该号码替换为空字符串("")。注意,不能一次全部替换为空字符串,因为,一个单元格的3个号码中,可能有2个以上的相同号码,如220、333。这样,一次替换一个号码,经过3次替换后,如果为空字符串,说明当前单元格中的号码与欲查找的号码相同(顺序不一定一致),此时,(SUBSTITUTE(...)="")为TRUE,与后面数值相乘时等同1处理,否则为FALSE,等同0。后面的(ROW(4:25)*100+COLUMN(B:K)))就是区域中各个单元格的行列号的数值。前后相乘的结果,要么为0,要么为找到的单元格所对应的行列号的数值。这个数组中只有一个大于0的值,其余都是0,所以,数组中的最大值就是该号码对应的行列号。

第2个问题。在D29单元格中输入公式:=INDIRECT(TEXT(C29,"!R0C00"),0),第2个参数0(或FLASH)表示为R1C1样式的引用。

第3个问题。

在E29单元格中输入公式:=INDIRECT(TEXT(C29-100,"!R0C00"),0)

在F29单元格中输入公式:=INDIRECT(TEXT(C29+100,"!R0C00"),0)

第4个问题。在G29单元格中输入数组公式:{=IF(COUNT(FIND(0,D29:F29))>0,0,"") & SUBSTITUTE(SUM(ISNUMBER(FIND(ROW($1:$9),D29 & E29 & F29))*ROW($1:$9)*10^(9-ROW($1:$9))),0,"")}

COUNT函数计数时,空白单元格、逻辑值、文字或错误值都将被忽略。公式前半部分(加粗部分)判断灰色区域3个单元格中是否至少有一个单元格中包括0,有为0,没有则为空字符串。公式后半部分中,顺序用1至9这9个数字在灰色区域3个单元格连接生成的文本中进行查找,如果有,则ISNUMBER(FIND(...))为TRUE,与后面的ROW($1:$9)*10^(9-ROW($1:$9))相乘;如果没有,则ISNUMBER(FIND(...))为FALSE,与后面相乘后的结果还是0。本例中,用SUM(...)求和后的结果为123000080,通过SUBSTITUTE()函数把所有0用空字符串替换掉,还剩1238四个号码,前面加一个0(原因前面已说过),最终结果为01238。