如果你對數組函數的概念還是有些懵懂的的話,那就這樣去理解:凡是一般函數涉及到一個單元格的、一個邏輯判斷條件的,都可以換成多個單元格或者多個邏輯判斷條件。當然這個話不能太絕對,這個隻是我在學習數組函數時候的一個感覺。好比LEFT函數,他是對一個單元格内的内容從左邊取字符,但是他也可以從多個單元格内的每一個單元格從左邊取字符形成了一個數組;又比如IF函數的第一個參數是一個條件,但這個條件可以設置成多個比較,也可以形成數組函數。總之,數組函數的概念簡單點說是一個變成了多個。
當然遇到問題并非隻有數組函數才能解決,數組函數我在上一節的内容說過他是函數的升級版,肯定不是全新的函數,隻不過有些問題需要通過幾步來完成的通過數組函數有時候一步就可以完成。
本福特定律
說到數組函數的應用,我首先就用本福特定律來舉例了。
本福特定律,也稱為本福特法則,說明一堆從實際生活得出的數據中,以1為首位數字的數的出現概率約為總數的三成,接近直覺得出之期望值1/9的3倍。推廣來說,越大的數,以它為首幾位的數出現的概率就越低。它可用于檢查各種數據是否有造假。
這個定律應用到财會數據中最合适不過了,因為會計數據充滿了大量的數字。而他的要求就是每個數字的第一個數字所出現的概率大緻在本福特定律規定的範圍内,否則就差不多是說這個帳是假賬了。
先來看下每個數字在本福特定律中出現的概率。
數字1:30.1%;數字2:17.6%;數字3:12.5%;數字4:9.7%;數字5:7.9%;數字6:6.7%;數字7:5.8%;數字8:5.1%;數字9:4.6%
可見每個數字的概率并非1/9左右。這些很多都是百度百科上貼來的。
那麼如果你有一堆财務數據,如何用EXCEL來驗證本福特定律呢?
其實也不是很難,第一步先把所有數字的第一位數字取出來,所以先用LEFT函數;第二步就是進行統計1-9的數字分别出現了多少次,這種統計可以用COUNTIF函數,當然有9個數字,你就分别要做9次統計了;第三步就是将每個數字出現的次數和總的數字個數求得概率了。
如果用數組函數那基本上可以說是一步到位了。首先LEFT函數是可以對一片區域内的所有單元格從左邊取出字符的。其次,當LEFT函數形成數組之後就和1-9這些數字進行比較,比如先和1進行比較得到的就是TRUE和FALSE的數組了。我之前也說過TRUE和FALSE其實就是1和0,如果對一堆0和1的數字進行求和,得到的結果自然就是等于數字1的個數了。好,我這就演示一下,當然為了方便顯示,我這裡所用到的數據量不大,另外所有數字都是我随機生成的。演示中,我會拆解步驟每一次公式我都用F9來顯示一下結果,這樣大家看起來就會明白很多了。
大家看到沒有,當我LEFT函數取出第一位的數字然後比較的不是數字1而是字符串”1”,是有雙引号的,所以說LEFT函數所形成的結果是字符串格式的,如果和數字1進行比較即便看起來都是1,但實際是不一樣的。
上面的演示到最後一步,我們得到了TRUE和FALSE的數組,如何轉化成0和1的數組呢,那就簡單了把TRUE和FALSE都乘1,就可以了。想一想就能理解,0和1相乘得到0,1和1相乘得到的還是1。然後對這個數組總的進行一次求和,得到的就是數字1出現的次數了。那麼下面我就做一個全面的演示,把數據量擴大一點,當然樣本數字還是随機的,所以得到的最後結果可能是“假賬”。
得到的結果異常的奇怪,不過方法是沒錯的,這裡面特别注意,最後一步需要依次分别按下CTRL SHIFT ENTER,表示這個函數是數組函數。
從這個例子中大家可以看到,如果你不用數組函數也可以用其他方法進行統計,無非數組函數更為簡便。另外一點就是數組函數對于單元格區域的操作非常有用,我們可以想想,很多的一般函數都是對一列或者一行單元格進行操作的,對一片單元格操作就比較困難,甚至可能要拆分幾步來做。這大概就是數組函數的優勢了。
數組函數的複雜問題
這個題目我也不知道怎麼取,可能光看題目不知所謂吧。我這裡舉一個例子,這個例子在現實工作中可能不太出現,但是無論如何如果你看懂了這些内容,那說明數組函數你是徹底理解了。
結合上面的例子,我們知道數組函數在單元格區域内進行操作是很簡便的,另外TRUE和FALSE的數組也是非常有用的,根據這兩個特點,我舉個例子。比如有一片區域從A1到F10各個單元格内有國家的名字,現在要統計出出現次數最多的國家的名字。 如圖所示。
有一個假設,就是這些國家事先并不知道都涉及到哪些國家,另一個假設是出現次數最多的國家隻有一個。我這裡用的是随機函數,所以我也不知道最大值是否唯一了。這個問題,不知大家在日常工作中是否有遇到類似的,總之這類問題不通過數組,也是可以通過其他操作分步驟來解決的。
首先,要統計出現次數的,自然就想到COUNT計數一類的函數,另外他是需要将單元格區域内的所有單元格都和這個區域的單元比較做統計,所以肯定是COUNTIF帶條件計數的函數。COUNTIF函數第一個參數是計數區域,第二個參數是條件,計數區域這沒什麼好說的,至于條件我們一般都是等于某某值,但其實利用數組的概念把條件設置為就是計數區域,那麼我們就理解為将計數區域内的每個單元格都計數一次,所以形成的結果自然就是一個個計數結果的數組,有多少個單元格就有多少計數值。
COUNTIF函數自然就是:=COUNTIF(A1:F10,A1:F10),當然這是一個數組函數,所以需要依次按下CTRL SHIFT ENTER,大家可以試下并且用F9來顯示一下結果,可以看到出現一串數字,這些數字代表每個單元格在計數區域内出現的次數。如果你對這些數字求最大值即=MAX(COUNTIF(A1:F10,A1:F10)),你得到的隻是出現最多的次數但并不知道是哪個國家。
接下去如何找到對應最大次數的國家是有點複雜的。不過數組看起來是一串數字,實際上順序還是按照區域單元格的順序來排列的,就是從A1到F10,所以接下去的步驟自然是要得到行和列來确定單元格。如果用最大值去等于比較計數數組函數,那麼得到的就是一串TRUE和FALSE的數組了,即MAX(COUNTIF(A1:F10,A1:F10))= COUNTIF(A1:F10,A1:F10),而這串0和1的數組也是按照單元格順序來排列的,正因為隻有0和1,所以乘以計數區域每個單元格的行号我們可以得到最大值對應的行号,而非最大值隻能是0,同理列号也可以這麼處理。而行和列的函數分别是ROW和COLUMN,因此針對行來說公式就是=(MAX(COUNTIF(A1:F10,A1:F10))= COUNTIF(A1:F10,A1:F10))*ROW(A1:F10),得到的結果不是0,就是行号,然後在求一次最大值就知道行号了,同理乘以COLUMN(A1:F10)并求最大值就得到列号了,通過INDIRECT引用函數以及我們得到的行号列号,就知道所在單元格了。
上面的做法其實比較複雜,還是可以簡化的,簡化的方法就是利用TEXT函數。TEXT函數是通過自定義的格式來返回結果,我之前說過INDIRECT引用單元格的格式可以是R1C1格式,即通過行号列号來确定單元格,我們得到行号如果都乘以100,然後在加上列号,再通過TEXT函數轉化就可以得到R1C1格式了。
到底什麼意思呢?比如我們得到的行是2,列是5,那麼行乘以100再加上列号,得到結果205,如果TEXT(205,”R0C00”),會得到什麼結果呢?首先公式中的0是數字占位符C00表示列在1-99之間,即最多兩位數,如果不滿兩位數則用0代替,所以205通過TEXT轉化結果就是R2C05,而這個字符串格式對于INDIRECT函數他是認可的,即INDIRECT(TEXT(205,”R0C00”,FALSE),函數會知道是第二行第五列單元格的值。這種做法首先要保證你的單元格區域的列最多不超過100,也就是說先确定列最多是多少,如果最多三位數,那麼行就乘以1000,然後格式上就是“R0C000”,以此類推下去。
好了說了這麼多,大家可能都暈了。經過我這麼文筆不是特别好的分析之後,最終公式就定格為:
=INDIRECT(TEXT(MAX(((MAX(COUNTIF(A1:F10,A1:F10))=COUNTIF(A1:F10,A1:F10)))*ROW(A1:F10)*100 COLUMN(A1:F10)),"R0C00"),FALSE)
最後不要忘記依次按下CTRL SHIFT ENTER。
這樣的例子夠複雜的了吧,所以我之前提到數組函數是可以解決各種稀奇古怪甚至變态的問題。我們雖然工作中會面臨這樣那樣的問題,但我相信方法總比困難多,數組函數隻是提供給大家的一種方法,畢竟無論黑貓白貓,能抓到老鼠就是好貓。
數組函數介紹完了,如果大家還不能很理解的話,我建議先從小問題來分析,這其中多多利用F9快捷鍵顯示結果,來驗證自己的想法,慢慢的循序漸進的學習,那數組函數就根本不是那麼難學了。我建議大家可以從個人所得稅練練手,如何用數組來計算個人所得稅。個人所得稅關鍵就是在如何判斷數字在某一個範圍内,那麼這個範圍已經規定好了差不多有7檔,那就是一個7個數字組成的數組,所以大家可以研究下。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!