這是一個非常有趣的問題,需要相當技術性的答案。
基本上,MATCH要求lookup_array屬於某個「類型」。這並不是說這個數組不能只包含單個元素(它可以),而是它的形式與MATCH期望傳遞其第二個參數的形式兼容。
而這種可接受的形式可以是一個值的數組,也可以是對工作表單元格(連續)一維範圍的引用。
當您執行:
=INDEX(K1:K2,MATCH(TRUE,K1:K2<0,0),)
被解析爲:
=INDEX(K1:K2,MATCH(TRUE,{TRUE;FALSE},0),)
等等查找數組,即:
{TRUE;FALSE}
是一個數組,即可接受的形式。
然而,當執行:
=INDEX(K1:K2,MATCH(TRUE,K1:K1<0,0),)
然後這個解析爲:
=INDEX(K1:K2,MATCH(TRUE,TRUE,0),)
和此時的查找_數組(TRUE)是單個布爾值,其不符合該參數類型的要求。
我們可以,但是,人爲脅迫該單一值,以便是正確的類型,即:
=INDEX(K1:K2,MATCH(TRUE,IF({1},K1:K1)<0,0),)
此時間解析爲:
=INDEX(K1:K2,MATCH(TRUE,{-10})<0,0),)
這是:
=INDEX(K1:K2,MATCH(TRUE,{TRUE},0),)
現在,單個布爾在技術上是數組的一部分(儘管只包含一個值),上面的解決方案可以根據需要進行解析。
作爲此行爲的另一示例,假設單元格A1包含值1。然後:
=MATCH(1,A1,0)
正確返回1,因爲,即使查找_數組是這裏的單 細胞,它(就像所有的工作表範圍一樣)仍然是技術上的數組類型。
但是,如果我們做一個小的變化,如:
=MATCH(1,N(A1),0)
那麼,即使這解析爲:
=MATCH(1,1,0)
,因此它會出現什麼都沒有事實上,通過將範圍參考A1「取消引用」到它的實際值,我們現在已經改變了它的無效類型lookup_array,以上因此導致錯誤。
MATCH的這種行爲在我看來最多不一致,最壞的情況是設計錯誤。
的結果:
=INDEX(K1:K2,MATCH(TRUE,K1:K1<0,0),)
應是:
=INDEX(K1:K2,MATCH(TRUE,{TRUE},0),)
沒有我們具有通過附加的,人工的方法將其轉換。
由於某些原因,如果要傳遞的數組僅包含一個值,那麼該值首先被「解析」爲非數組類型,與那些包含多個值的數組不同,數組類型被保留。
問候
請參閱本【答案】(http://stackoverflow.com/questions/18991351/excel-return-the-first-negative-number-of-a-column)。 –
建議的解決方案僅適用於範圍內有多行的情況。我想了解爲什麼這些公式在單行範圍內失敗。'= INDEX(範圍,MATCH(TRUE,範圍<0,0))' – stuon