会返回:1,即字符“a”在字符串中开始出现的位置。我们可以指定被查找的字符串(示例中为A1中的字符串)起始位置,例如2,则公式:会返回:4,即在字符串的第2个位置开始查找字符“a”,发现的其从第2个位置开始首次出现的位置是4。如果我们要使用一个公式,获得字符“a”在字符串中出现的所有位置,那该怎么办呢?=FIND('a',A1,ROW(INDIRECT('1:'&LEN(A1))))=FIND('a',A1,ROW(INDEX($A:$A,1,1):INDEX($A:$A,LEN(A1),1)))得到由包含字符“a”在字符串中出现的位置组成的数组:{1;4;4;4;6;6;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}我们看到,得到的数组中有重复值,也有错误值,这是由查找函数多次查找得到的结果。接下来,我们想要得到仅由字符“a”在字符串中出现的位置组成的数组:ROW(INDIRECT('1:'&LEN(A1)))将会得到一个连续数值组成的数组,示例中单元格A1中的字符串长度为11,因此得到的数组为:{1;2;3;4;5;6;7;8;9;10;11}{1;4;4;4;6;6;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}={1;2;3;4;5;6;7;8;9;10;11}{TRUE;FALSE;FALSE;TRUE;FALSE;TRUE;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}我们可以看到,数组中TRUE值对应的正好是字符“a”在字符串中的位置。使用IF函数取出这些位置值:IF({TRUE;FALSE;FALSE;TRUE;FALSE;TRUE;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!},{1;2;3;4;5;6;7;8;9;10;11}){1;FALSE;FALSE;4;FALSE;6;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}因为SMALL函数不能处理错误值,因此使用IFERROR函数去除错误值:IFERROR({1;FALSE;FALSE;4;FALSE;6;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!},””){1;FALSE;FALSE;4;FALSE;6;'';'';'';'';''}SMALL({1;FALSE;FALSE;4;FALSE;6;'';'';'';'';''},{1;2;3;4;5;6;7;8;9;10;11}){1;4;6;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!}IFERROR({1;4;6;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!},””){1;4;6;'';'';'';'';'';'';'';''}=IFERROR(SMALL(IFERROR(IF(FIND('a',A1,ROW(INDIRECT('1:'&LEN(A1))))=ROW(INDIRECT('1:'&LEN(A1))),ROW(INDIRECT('1:'&LEN(A1)))),''),ROW(INDIRECT('1:'&LEN(A1)))),'')LEN(A1)-LEN(SUBSTITUTE(A1,'a',''))ROW(INDIRECT('1:'&LEN(A1)-LEN(SUBSTITUTE(A1,'a',''))))=SMALL(IFERROR(IF(FIND('a',A1,ROW(INDIRECT('1:'&LEN(A1))))=ROW(INDIRECT('1:'&LEN(A1))),ROW(INDIRECT('1:'&LEN(A1)))),''),ROW(INDIRECT('1:'&LEN(A1)-LEN(SUBSTITUTE(A1,'a','')))))
|