楼主 悟空师弟 |
Q:如何提取每个单元格都出现过的字符? 如下: A:公式如下:(数组公式)
如何提取每个单元格都出现过的字符?.rar |
2楼 海洋之星 |
厉害,能不能讲解一下这个公式的意思啊,我看不懂 |
3楼 悟空师弟 |
公式解析: 先看个直观的解法:
1、将A2:C2三个单元格的文本合并后再分解成单个字符; 选中MID(A2&B2&C2,ROW($1:$99),1) 按F9可看到计算结果为: {"B";"4";"A";"C";"4";"B";"4";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";""} 2、再计算出每个字符在A2:C2三个单元格中出现过多少次(同一个单元格出现两次及以上只算一次); 选中COUNTIF(B2:C2,"*"&MID(A2,ROW($1:$99),1)&"*") 按F9可看到计算结果为: {2;3;1;1;3;2;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3} 3、找出出现3次的所在位置, (用MATCH找到的是第1个。) 选中 MATCH(3,COUNTIF(A2:C2,"*"&MID(A2&B2&C2,ROW($1:$99),1)&"*"),)按F9可看到计算结果为:2 ; 4、用MID返回用MATCH找到的位置所对应的字符。 此公式虽然直观,但很多字符以及计算过程可以省略,1楼的公式是在此思路基础上对公式进行字符简化、速度优化。 1楼公式解题思路: 将A2单元格内所有字符分解成单个字符,计算出每个字符在B2:C2出现过多少次,如果出现过2次,再加上本身在A2单元格出现过1次,共出现3次,即每个单元格都出现过一次,再找出其中一个字符即为所需结果。 说明: 1、1楼公式中的“ROW($1:$99)中的 99 可根据实际情况中A列最大字符长度而定,1楼示例中A列最多3个字符,99 可改为 3。 2、A2:C2 区域中不可出现数值型数据,比如纯数字、日期、时间等。 |
4楼 sjz76meizi |
版主解释的好详细,学习了 |
5楼 無心 |
如果有两个字符在三个单元格同时出现呢,只能提取第一个出现的字符。 |
6楼 悟空师弟 |
不管提取的是第几个,都符合“任选一个”。 |