Excel數(shù)組公式

需要注意的:


  1. 雖然 + * 有時(shí)可以和 or 渐白、and 互換唱遭,但是他們是有區(qū)別的诈茧,例如:
    =sum(if(and(A1:A2>0,A1:A2<8),B1:B2))
    VS
    =sum(if((A1:A2>0)*(A1:A2<8),B1:B2))

前者只有當(dāng) A1:A2 都介于0和8之間時(shí)才返回 B1:B2 的和泡垃,否則得到的結(jié)果是 0 旨怠;
后者則分開了渠驼,比如A1介于0和8之間,A2不介于0和8之間鉴腻,那么求得的結(jié)果是B1的和迷扇,而不是0。
AND(logical1,logical2, ...) --詳見 and 函數(shù)幫助:當(dāng)所有的logical們都為True時(shí)返回True --這是1個(gè)單值爽哎;
OR(logical1,logical2, ...) --詳見 or 函數(shù)幫助:當(dāng)所有的logical們只要有一個(gè)為True時(shí)返回True --這是1個(gè)單值谋梭;
(A1:A2>0)*(A1:A2<8) -- 返回的是{True;False}*{True;True}類型的數(shù)組相乘的結(jié)果{1;0}——這是一個(gè)數(shù)組
(A1:A2>0)+(A1:A2<8) -- 返回的是{True;False}+{True;True}類型的數(shù)組相加的結(jié)果{2;1}——這是一個(gè)數(shù)組倦青;
就是說And瓮床、OR計(jì)算出來的總是單值,不是數(shù)組。

  1. -- 用于把文本轉(zhuǎn)換成數(shù)字隘庄,也可以用 *1 代替踢步,(或者 N("xx"+0) ?)

  2. 應(yīng)用: 將文本中的數(shù)字取出,例如:"收取32.0元"
    =LOOKUP(9E+307,--MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890) ),ROW(INDIRECT("1:"&LEN(A1)))))

還可以再加上對(duì) MIN(FIND...) 的值與 LEN(A1) 的比較丑掺,以免出現(xiàn) #N/A

解釋:構(gòu)造了一個(gè)搜索數(shù)組获印,從最先出現(xiàn)數(shù)字的位置開始取子字符串,然后將其轉(zhuǎn)換為數(shù)字(不能轉(zhuǎn)換為數(shù)字的為#N/A)街州,然后用Lookup指定一個(gè)9E+307這樣的大數(shù)兼丰,最后返回小于等于他的(實(shí)際上也就是最接近它的)數(shù),也就是最長的可以轉(zhuǎn)換為數(shù)字的子字符串唆缴。

  1. 應(yīng)用:取出某列中非空不重復(fù)的單元格的內(nèi)容:
Excel數(shù)組公式

這里加一個(gè)要求:返回B1:B20內(nèi)不重復(fù)非空單元格鳍征。
步驟分解:
(1)首先取出非空不重復(fù)單元格所在的行號(hào):
IF($B$1:$B$20<>"",IF(MATCH($B$1:$B$20,$B$1:$B$20,0)=ROW($B$1:$B$20),ROW($B$1:$B$20)))

因?yàn)镸ATCH函數(shù)不能使用空值作為第一個(gè)參數(shù),所以先使用IF語句把空值排除出去面徽。
然后由于MATCH函數(shù)返回搜索值中在整個(gè)區(qū)域第一次出現(xiàn)的位置艳丛,將其和自身所在行號(hào)進(jìn)行比對(duì),就可以判斷是否重復(fù)趟紊。
為了方便將它定義為一個(gè)名稱x氮双,這是一個(gè)數(shù)組。

(2)然后使用 IF(ROW(1:1)>COUNT(x),"",INDEX(A:A,SMALL(x,ROW(1:1)))) 得到想要的結(jié)果霎匈,這是使用數(shù)組得到一個(gè)單值戴差。

  1. 應(yīng)用:返回B列內(nèi)等于“A”的對(duì)應(yīng)A列的記錄:
Excel數(shù)組公式

步驟分解:
(1)首先使用 IF($B$1:$B$20="A",ROW($B$1:$B$20)) 實(shí)現(xiàn)判斷B列等于"A"的記錄的行號(hào)。
注意這個(gè)結(jié)果是一個(gè)數(shù)組铛嘱,使其有了不同的用途暖释,為了方便可以將其定義為名稱 x
(2)使用 SMALL(x,ROW(1:1)) 把符合條件的行號(hào)按照從小到大的順序列出來弄痹,這是使用數(shù)組得到一個(gè)單值。
(3)使用 INDEX($A$1:$A$20,SMALL(x,ROW(1:1))) 嵌器,把A列對(duì)應(yīng)的記錄取出來肛真。
(4)為了不出現(xiàn)錯(cuò)誤值,使用 SUM(($B$1:$B$20="A")*1)<ROW(1:1) 作為判斷條件爽航,一般使用SUM數(shù)組公式蚓让,可以組合多個(gè)條件,且的關(guān)系使用 *讥珍,或的關(guān)系使用 + 历极,只有一個(gè)條件時(shí)要加個(gè)常用條件,例如本例 *1 衷佃。
如果在增加一個(gè)條件趟卸,則在此主公式中加入 IF(($B$1:$B$20="A")*($C$1:$C$20="B"),ROW($B$1:$B$20)) , 然后相應(yīng)地在 (SUM(($B$1:$B$20="A")*1)<ROW(1:1) 中加入相應(yīng)的判斷條件

(5)最終公式為:
=IF(SUM(($B$1:$B$20="A")*1)<ROW(1:1),"",INDEX($A$1:$A$20,SMALL(x,ROW(1:1))))

  1. 返回重復(fù)次數(shù)最多的值


    Excel數(shù)組公式

解題步驟:
(1)首先使用IF(COUNTIF($B$1:$B$20,$B$1:$B$20)=MAX(COUNTIF($B$1:$B$20,$B$1:$B$20)),ROW($B$1:$B$20))
得到一個(gè)數(shù)組,用于符合條件的行的行號(hào),也就是G列所示的值,為了方便可以將其定義為名稱 x 锄列。
(2)使用 INDEX($C$1:$C$20,SMALL(x,ROW(1:1)))图云,把C列中的內(nèi)容取出來。
(3)為了不出現(xiàn)錯(cuò)誤值邻邮,可以使用 IF(COUNTIF($B$1:$B$20,$B$1:$B$20)=MAX(COUNTIF($B$1:$B$20,$B$1:$B$20)),1) 得到另外一個(gè)數(shù)組竣况,用于符合條件的行的計(jì)數(shù),將其定義為名稱y筒严。然后使用 SUM(y)<ROW(1:1) 作為判斷條件丹泉。
(4)最終公式為
=IF(SUM(y)<ROW(1:1),"",INDEX($C$1:$C$20,SMALL(x,ROW(1:1))))

  1. 按照重復(fù)次數(shù)的大小列示內(nèi)容
Excel數(shù)組公式 - supershll - 記憶里

解題步驟:
(1)首先得到不重復(fù)單元格所在的行號(hào)數(shù)組:
IF(MATCH($B$1:$B$20,$B$1:$B$20,0)=ROW($B$1:$B$20),ROW($B$1:$B$20))
如E列所示。

(2)然后得到不重復(fù)單元格的重復(fù)次數(shù)數(shù)組:
IF(MATCH($B$1:$B$20,$B$1:$B$20,0)=ROW($B$1:$B$20),COUNTIF($B$1:$B$20,$B$1:$B$20))
如F列所示

(3)為了進(jìn)行排序的同時(shí)又得到行號(hào)鸭蛙,所以綜合E列和F列的數(shù)據(jù)摹恨,使用如下:
IF(MATCH($B$1:$B$20,$B$1:$B$20,0)=ROW($B$1:$B$20),COUNTIF($B$1:$B$20,$B$1:$B$20)+ROW($B$1:$B$20)/1000)

這樣整數(shù)部分是重復(fù)次數(shù),小數(shù)部分是行號(hào)规惰。
如G列所示睬塌,這個(gè)數(shù)組符合我們的使用要求了,將其定義為名稱 x 歇万。

(4)使用LARGE函數(shù)進(jìn)行排序揩晴。LARGE(x,ROW(1:1)) ,這是使用數(shù)組得到一個(gè)單值贪磺。

(5)然后使用MOD函數(shù)取出行號(hào)硫兰。MOD(LARGE(x,ROW(1:1))*1000,1000)

(6)然后在使用INDEX函數(shù)取出對(duì)應(yīng)行的記錄。INDEX($B$1:$B$20,MOD(LARGE(x,ROW(1:1))*1000,1000))

(7)最后屏蔽錯(cuò)誤值寒锚,IF(ROW(1:1)>COUNT(x),"",INDEX($B$1:$B$20,MOD(LARGE(x,ROW(1:1))*1000,1000))), 也可以使用ROW(1:1)>SUM(1/COUNTIF($B$1:$B$20,$B$1:$B$20)) 作為判斷條件, 這個(gè)SUM的意思就是說區(qū)域內(nèi)去重后的單元格的個(gè)數(shù)(假設(shè)重復(fù)的單元格a的個(gè)數(shù)n,n個(gè)(n/1)相加最后變成1)劫映。

  1. 返回區(qū)域內(nèi)符合條件的值
Excel數(shù)組公式 - supershll - 記憶里

解題步驟:
(1)首先使用 IF($A$2:$H$12=1,ROW($A$2:$H$12)*10000+COLUMN($A$2:$H$12)) 找出符合條件的單元格行號(hào)和列號(hào)數(shù)組,這是一個(gè)2維數(shù)組刹前。將其定義為名稱 x

(2)如果想使用INDEX函數(shù)就需要找出相關(guān)的參數(shù)來泳赋,即INDEX(數(shù)據(jù)區(qū),行數(shù)喇喉,列數(shù)) 祖今。使用INT(SMALL(x,ROW(1:1))/10000) 獲得行號(hào), MOD(SMALL(x,ROW(1:1)),10000) 獲得列號(hào)。

(3)最后使用INDEX獲得結(jié)果拣技,此公式是姓名列的公式(其中Column()-17是根據(jù)公式所在列設(shè)置的) INDEX($A$1:$H$12,INT(SMALL(x,ROW(1:1))/10000),MOD(SMALL(x,ROW(1:1)),10000)+COLUMN()-17)

(4)最后就是屏蔽錯(cuò)誤值的問題千诬。使用IF(SUM(IF($A$2:$H$12=1,1))<ROW(1:1),"","原公式")

  1. 按順序返回不重復(fù)值


    Excel數(shù)組公式 - supershll - 記憶里

解題步驟:
(1)使用MATCH函數(shù)獲取不重復(fù)行的行號(hào)和值的數(shù)組,將其定義為名稱x膏斤。
IF(MATCH($B$1:$B$6,$B$1:$B$6,0)=ROW($B$1:$B$6),ROW($B$1:$B$6)*100+$B$1:$B$6)

(2)使用SMALL函數(shù):
SMALL(MOD(SMALL(x),{1;2;3}),100),ROW(1:1))

  1. 返回?cái)?shù)字中不重復(fù)的前3位數(shù)徐绑。
Excel數(shù)組公式 - supershll - 記憶里

解題步驟:
(1)使用 ROW(INDIRECT("1:"&LEN(A1*B1))) 求出乘積結(jié)果的位數(shù)序號(hào)數(shù)組,如F列所示莫辨,定義為名稱 x

(2)使用 MID(A1*B1,x,1) 把乘積的結(jié)果按照原有順序組成內(nèi)存數(shù)組,如G列所示傲茄,定義為名稱 y

(3)然后使用MATCH函數(shù)獲取不重復(fù)行的行號(hào)和值的數(shù)組毅访,定義為名稱 m ,如J列所示 IF(MATCH(y,y,0)=x,x*100+y)

(4)使用SMALL函數(shù)烫幕,SMALL(MOD(SMALL(m),{1;2;3}),ROW(1:1)) 俺抽,如M列所示,這是由數(shù)組得到的單值

(5)將結(jié)果串起來 TEXT(SUM(SMALL(MOD(SMALL(m),{1;2;3}),{1;2;3})*10^{2,1,0}),"000") 再次使用數(shù)組得到一個(gè)單值。

  1. 總結(jié):使用數(shù)組公式较曼,一定要時(shí)刻明白磷斧,何時(shí)結(jié)果是數(shù)組,何時(shí)結(jié)果是單值捷犹。然后再根據(jù)結(jié)果參與計(jì)算弛饭,例如送數(shù)組中取出單值或把單值組合成數(shù)組
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萍歉,隨后出現(xiàn)的幾起案子侣颂,更是在濱河造成了極大的恐慌,老刑警劉巖枪孩,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憔晒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蔑舞,警方通過查閱死者的電腦和手機(jī)拒担,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攻询,“玉大人从撼,你說我怎么就攤上這事【埽” “怎么了低零?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拯杠。 經(jīng)常有香客問我掏婶,道長,這世上最難降的妖魔是什么潭陪? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任雄妥,我火速辦了婚禮,結(jié)果婚禮上畔咧,老公的妹妹穿的比我還像新娘茎芭。我一直安慰自己揖膜,他們只是感情好誓沸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著壹粟,像睡著了一般拜隧。 火紅的嫁衣襯著肌膚如雪宿百。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天洪添,我揣著相機(jī)與錄音垦页,去河邊找鬼。 笑死干奢,一個(gè)胖子當(dāng)著我的面吹牛痊焊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忿峻,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼薄啥,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了逛尚?” 一聲冷哼從身側(cè)響起垄惧,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绰寞,沒想到半個(gè)月后到逊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滤钱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年觉壶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菩暗。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掰曾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出停团,到底是詐尸還是另有隱情旷坦,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布佑稠,位于F島的核電站秒梅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏舌胶。R本人自食惡果不足惜捆蜀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幔嫂。 院中可真熱鬧辆它,春花似錦、人聲如沸履恩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽切心。三九已至飒筑,卻和暖如春片吊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背协屡。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工俏脊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肤晓。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓爷贫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親补憾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沸久,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容