=计数(查找(mid ) B2,行) $1:$10 ),1 ),A2) )=10}

数据间的包含关系是Excel函数常见的问题之一,通常的解法利用SEARCH函数、FIND函数等文本检索函数。 例如,要确定全集字符串ABC中是否包含子集字符串AB,请执行以下操作:

但是你知道吗? 这些解决方案有一个共同的致命弱点:它们有序地包含在内。 即,部分集合内各字符串的排列顺序必须与全集字符串一致,如果顺序不一致就不能很好地一致。 例如,ABC中包含a和b,但AB和BA的FIND返回值有很大不同。

一个高个子果汁资深粉丝曾提出如何解读这种无序的内涵的问题。 答案在下图中。 这四个函数嵌套的奇怪公式,居然解决了这个疑难杂症!

C2公式如下。

=计数(查找(mid ) B2,行) $1:$10 ),1 ),A2) )=10}

当我给出这样的回答时,这个花瓣马上就犯了难。 这个公式很强大,但包含多重嵌套和复杂的运算逻辑,难以捉摸。 别急,听大果汁细细拆开。

STEP 01 公式分割

复杂的公式是一口吞不下的大蛋糕,所以分着吃吧。 根据函数名称和特定符号分割表达式是学习复杂函数的第一步。 把复杂的公式一个个分割成实现特定功能的小片段,有助于我们更好地消化和理解。

ps :这里所说特定的符号是分隔函数的各参数的逗号、表示优先计算顺序的括号、比较运算符< > 包括=等。

接下来,让我们来分割这个复杂的公式。

STEP 02 各个击破

上图将公式分成五个独立的小片段。 在此,我们将逐一解读各部分的运算逻辑和目标功能。

{}

中括号{}是数组表达式的标志,可以在成功输入函数后立即按Ctrl Shift Enter键进行数组运算。 可以将数组表达式视为多个结构相同的函数表达式的集合。 数组表达式中的表达式根据重复运算的方法、顺序和逻辑进行多次重复运算。 这意味着数组运算的返回值不是单个值,而是一系列数。

这个可能很难理解,但没关系。 以下说明中结合数组运算的原理进行说明。

row($1: ) $10 ) ) )。

ROW函数是返回单元格行号的简单函数,基本语句为=ROW (返回行号的单元格),ROW ) a1 )=1,ROW ) a2 )=2。 1:10表示第1行到第10行,具体所需的行数取决于字符串的最大字符数。 另一方面,片段row($1:$10 )是1336010行的行号,即

row $ 1: $ 10 ({ 1,2,3,4,5,6,7,8,9,10 }

这就是数组运算的魔力,本来就是只返回单一值的ROW函数。 在这种情况下,可以对每个参数进行运算,然后逐个返回结果,从而生成一组数。 排列式的其他片段是一样的。

mid(B2,,1 ) )。

MID函数是从字符串的某个字符中剪切指定个数的字符的函数。 其基本语句是MID (目标字符串、剪切开始位置、剪切字符数)。 举个例子,MID ‘秋叶Excel ‘,3,5 )如图所示,从第3个字符串e开始,剪切5个字符后就是Excel。

于是,我们解开了的功能之谜。 也就是说,从B2中取一个文字。 然后,将MID和ROW函数组合起来。 也就是说,从B2单元格的第1个字符到第10个字符,各取1个字符。 这样,就可以将B2的各个字符逐个分开。 那么,如果B2的字符数小于10个字符会怎么样呢? 简单,不足的部分是空的,所以即使剪下结果

为空。

那么片段③的返回结果是由B2的每一个字符和空值组成的数组a。

MID(B2, ②,1)={T,Y,E,B,,,,,,}

④FIND(③,A2)

这个片段是数组函数的核心。FIND函数的基本语句是FIND(要查找的子集字符串,包含子集的全集子符串)。FIND函数可以将③返回的每一个字符都在A2字符串中匹配查找,如果A2包含该字符,则返回≥1的序数值,不包含则返回# VALUE!。

这里有一个特殊情况,那就是片段③返回结果中的多余空值。有趣的是,这些多余空值并不会影响FIND的匹配,因为FIND(空值,目标字符串)始终返回1。

因此,只有当B2中的某个字符不包含在A2中,FIND函数才返回错误值,其余情况均返回指定序数值。即,片段④返回结果为10个由正整数或# VALUE!组成的一维数组b。

FIND(③, A2)={8,7,…# VALUE,…1,1,…}

⑤COUNT(④)=10

COUNT函数是返回数值型数字个数的计数函数,它在计数过程中,仅对数值进行计数,自动忽略错误值、文本、逻辑值和空值。我们正是利用了COUNT函数忽略错误值这一特性,使得片段COUNT(④)返回④中序数值的个数。当且仅当④中含有# VALUE!,计数结果小于10,其余情况下,计数结果都等于10。紧接着,我们用=10来做一个逻辑判断,计数结果等于10返回TRUE,否则返回FALSE。

也就说,只有当B2中不包含A2字符串以外的字符,FIND函数才不会返回错误值# VALUE!,此时COUNT计数结果才能等于10,逻辑判断才能为TRUE。

STEP 03 复盘全局

分析理解了各个片段的过程,我们需要再将这些逻辑运算片段串联起来,形成完成的计算逻辑。让我们结合流程图来回顾下求解过程。

1,利用ROW函数返回一组1到n的有序数组;

2,利用MID函数进行颗粒化,将子集字符串拆分成多个单一字符或空值组成的1* n的数组a;

3,利用FIND函数逐一匹配数组a中的每一个字符在全集字符串中出现的位置,返回一组由正整数和错误值组成的1*n的数组b;

4,利用COUNT函数忽略错误值计数的特点,通过判断计数结果是否为n来推断子集中是否包含全集字符串以外的字符,从而完成乱序包含问题的求解。

C2的公式计算过程如下

C3的公式计算过程如下

以上,就是复杂的COUNT+ FIND+ MID+ ROW嵌套数组公式的详细讲解。或许公式本身并不常见,但是其中蕴含的运算逻辑却经常被运用。纵观当下Excel教程文章,热衷于分享各式函数用法的,车载斗量;而真正认真讲解各中道理的却寥若晨星。