發布時間:2024-01-22閱讀(8)
{=COUNT(FIND(MID(B2,ROW($1:$10),1),A2))=10}
數據間的包含關系是Excel函數中的常見問題之一,通常的解法都是利用文本查找函數,如SEARCH函數、FIND函數等等。舉個例子,我們要判斷子集字符串AB是否被全集字符串ABC所包含,我們會這樣做:

但你知道嗎?這些解決方案都有一個共同的致命弱點,那就是有序包含。即子集中各字符串的排列順序必須和全集字符串一致,順序不一致就無法成功匹配。例如,A和B都被ABC所包含,但是,AB和BA的FIND返回值卻大相徑庭。

小花的一名資深粉絲就曾提出了這樣一個問題:如何破解這種亂序包含呢?答案就在下圖中。這個由四個函數嵌套而成的古怪公式,竟然解決了這個疑難雜癥!!!

C2公式如下:
{=COUNT(FIND(MID(B2,ROW($1:$10),1),A2))=10}
當我給出這樣的答案時,這位花瓣立刻犯了難,這個公式雖然功能強大,但卻包含多重嵌套和復雜運算邏輯,讓人捉摸不透!別急,且聽小花細細分解。
STEP 01 公式分割復雜公式是一口吞不下的大蛋糕,那就讓我們分而食之。根據函數名稱和特定符號來分割公式是學習復雜函數的第一步。將復雜公式分割成一個個實現特定功能的小片段,能幫助我們更好地消化理解。
ps:這里提到的特定符號包含劃分函數各參數的逗號,表示優先計算序的括號,比較運算符<>=等。
接下來讓我們來試著分割下這個復雜公式。

上圖中我們將公式劃分成五個獨立的小片段,這一步我們就來逐一解讀每一部分的運算邏輯和目標功能。
① {}
大括號{}是數組公式的標志,正常輸入函數后,立即按Ctrl Shift Enter即可進行數組運算。數組公式可以認為是多個相同結構函數公式的集合,數組公式中的公式按重復的運算方法、次序和邏輯重復運算多次,即數組運算的返回值是一組數,而非單一值。
這可能很難理解,沒關系,在接下來的講解中我們還是穿插講解數組運算的原理。
② ROW($1:$10)
ROW函數是返回單元格行號的簡單函數,它的基本語句是= ROW(要返回行號的單元格),ROW(A1)=1, ROW(A2)=2。1:10表示第一行到第十行(具體所需行數是亂序字符串的最大字符數而定),那么片段②ROW($1:$10)則返回1:10行的行號,即
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教程文章,熱衷于分享各式函數用法的,車載斗量;而真正認真講解各中道理的卻寥若晨星。
下一篇:紅娘是哪一部作品中的人物
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖