2015-09-14 92 views

回答

0

假設的值是在單元格A1,使用以下公式:

這是一個陣列式,並且必須以Ctrl鍵 + 移位來確認 + 輸入

=1=SUM(--(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)="0")) 

現在複製公式指向其他四個單元格。

就是這樣。

這裏是如何工作的...

假設A1單元格的值是11101111

所以,這是一個總的八個字符。我們可以看到其中有7個是1,1個是0.

但是我們如何讓Excel看到同樣的東西?

該公式的核心是MID()函數。我們用它來將這個值分成八個獨立的字符。

在正常使用情況下,MID()函數只是從較大的字符串中返回一個文本的子字符串。您可以將它提供給較大文本中的開始位置以及您想要的子字符串的長度,並返回該子字符串。

例如:=MID(A1,3,3)在參考我們的A1時將返回101

如果我們將其更改爲:=MID(A1,4,1)我們將得到0

但是,我們如何讓MID()函數完全將A1中的值分解爲謹慎的單字符子串。請記住,MID()通常只返回一個子字符串。但在我們的例子中,我們希望它返回八個子字符串。

這是數組公式出現的位置。請記住MID()的第二個參數是我們想要返回的子串的起始位置。如果我們將第二個參數傳遞給數組而不是單個數字,那麼MID()將爲數組中的每個值執行一次函數。

在Excel中指定數組的一種方法是使用數組常量。因此,我們可以將MID()例如改成這樣:

=MID(A1,{1;2;3;4;5;6;7;8},1) 

而結果是這樣的:{"1";"1";"1";"0";"1";"1";"1";"1"}

現在,如果您只在一個單元格中輸入上述公式,則只會看到第一個元素,它是一個元素。但是,如果你選擇的八個垂直單元格區域,然後點擊在工作表上的公式欄和輸入公式,然後證實按Ctrl + Shift鍵的排列方式 + 輸入

...你會看到這八個不同的值出現在選定的範圍內。

即使從一個單元格看完整結果的另一種方法是在「公式欄」中選擇完整公式,然後按鍵盤上的012鍵。該公式將替換爲公式欄中的結果。您可以使用此技術來評估公式或較大公式的謹慎部分。如果您按輸入結果將保留在配方欄中。如果您想要公式,請按Esc

使用數組常量的問題是,它僅在單元格A1中的文本長度小於或等於8個字符時才能正常工作。如果我們想要處理更長的文本,那麼我們需要一個具有更多值的數組常量。解決這個問題的一種方法是使用公式來創建一個即時數組,在評估時看起來像我們的數組常量。我們將這個公式設計成與單元格A1中文本中的字符具有完全相同數量的增量元素。

這正是這個結構在我們的公式中的作用:

ROW(OFFSET($A$1,,,LEN(A1)) 

回想一下,當MID()函數完成後,我們留下了這陣結果:{"1";"1";"1";"0";"1";"1";"1";"1"}

現在我們對每個元素應用邏輯測試,問這些測試是否等於0

這裏是如何將看:

{"1";"1";"1";"0";"1";"1";"1";"1"}=0 

返回一個新數組,結果是這樣的:

{FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE} 

注意,只有第4單元爲TRUE,這當然是完全對。

所以這是進步。

現在我們要計算有多少元素是TRUE。我們知道答案是一個。但Excel如何解決這個問題呢?

如果我們的數組是數字而不是這些布爾值TRUE和FALSE,那將會很不錯。將布爾數組轉換爲數字的簡單方法是在數組前面使用兩個減號。當TRUE值變爲負數時,它變成一個數字;它變成-1。當我們用第二個減號命中它時,-1變成+1。當然,FALSE變成0

所以這樣做應該是這樣的:

--({FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}=0) 

而結果是這樣的:

{0;0;0;1;0;0;0;0} 

注意,陣列現在由數字組成。當我們首先查看MID()函數的結果時,它看起來像這樣:{"1";"1";"1";"0";"1";"1";"1";"1"}而那些不是數字;他們是文字。注意所有的引號。

如果您密切關注,您可能會想知道爲什麼我們不能直接在MID()函數的輸出中使用這兩個減號來將這些文本數字轉換爲實數。那麼,事實上我們可以有。但是我們需要一個數組,其中1表示源零,0表示源1。換句話說,我們需要反過來。採取這些額外的步驟給了我們。

我們現在可以在數組上使用SUM()。

=SUM{0;0;0;1;0;0;0;0}) 

由於它僅求和1和0和1秒錶示原始源零,結果是源零的計數。

我們進行最後一個測試,看看結果是等於一個,因爲你要知道,如果在單元格A1值有且僅有一個零吧:

=1=SUM{0;0;0;1;0;0;0;0}) 

結果爲真。

+0

@KjubE這個爲你工作 ? –

相關問題