簡體   English   中英

Excel 索引 + 單個單元格范圍的匹配失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM