[英]Excel Index + Match failing for single cell range
我希望嘗試在可以包含一個或多個值的列表中找到第一個負數。 我正在使用索引/匹配。 當范圍(或命名引用)具有兩個或多個單元格時,它會正確找到該值。 但是,當范圍只有一個單元格時,它會失敗。
例如,K1 和 K2 列中的 Excel 數據分別為 -10.00 和 20.00
當我在下面嘗試時,它按預期返回 -10.00
=INDEX(K1:K2, MATCH(TRUE,K1:K2<0,0),)
但是,當我只搜索一個單元格范圍時,它會失敗並顯示“#N/A”。 我希望它返回-10.00。
=INDEX(K1:K1, MATCH(TRUE,K1:K1<0,0),)
使用包含單個單元格的命名引用時會出現同樣的問題。
非常感謝
這是一個非常有趣的問題,並且需要一個非常技術性的答案。
基本上,MATCH要求lookup_array是某個“類型”。 這並不是說該數組不能僅包含一個元素(它可以包含),而是它的形式與MATCH期望為其第二個參數傳遞的形式兼容。
這種可接受的形式可以是值的數組,也可以是對(連續)一維工作表單元格范圍的引用。
執行時:
=INDEX(K1:K2,MATCH(TRUE,K1:K2<0,0),)
解析為:
=INDEX(K1:K2,MATCH(TRUE,{TRUE;FALSE},0),)
因此是lookup_array ,即:
{TRUE;FALSE}
是一個數組,即具有可接受的形式。
但是,當您執行:
=INDEX(K1:K2,MATCH(TRUE,K1:K1<0,0),)
然后解決為:
=INDEX(K1:K2,MATCH(TRUE,TRUE,0),)
並且這次lookup_array (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,因為,即使lookup_array在這里是單個單元格,但從技術上講,它(因為所有工作表范圍都是)仍然是數組類型。
但是,如果我們做一些小改動,例如:
=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),)
無需我們通過其他人為手段強制實施。
出於某種原因,如果要傳遞的數組僅包含一個值,則該值首先被“解析”為非數組類型,與那些由多個值組成的數組不同,其數組類型為保留。
問候
我在lookup_array上遇到了同樣的問題,幸運的是遇到了這個線程。
我真的很喜歡@XOR LX 的解釋。 然而,提出的概念解決方案IF({1},K1:K1)
在 Excel 中不可用。
所以對我有用的最終公式是:
MATCH(
range,
IF(
COUNTA(lookup_array)=1,
CHOOSE({1,2},lookup_array,""),
lookup_array
),
0
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.