[英]Lookups with Multiple Non-Exact Criteria using INDEX-MATCH - Problem finding nearest values that best meet conedition
我正在嘗試使用 INDEX-MATCH 使用多個非精確條件進行查找。 形式如下:
=INDEX(C314:C318;MATCH(1;(D314:D318>=G313)*(E314:E318>=G314);0))
標准是:大於或等於數量 X。
公式工作正常,但是當使用一長串值時,它沒有找到最佳匹配值,而是找到第一個符合條件的值。
例如。
條件 1 是:代碼“查找代碼等於 2055516” 條件 2 是:數字“查找值等於或大於 77” 條件 3 是:字母順序“查找等於或大於 H 的字母”
在我有很多值的大型數據集中,它只找到符合此條件的下一個最佳值。 滿足該條件的第一個值將是“80”和“R”,但是,在我的數據集中的值之后,下面的方式更符合那些“78”和“I”的標准。 我想這里的問題很明顯。
我如何調整我的公式來尋找那些更符合我的條件的值?
數據集表如下所示:
公式應返回最佳加工產品的名稱“A、B、C、D、E”。
我使用了一個名為Helper
的輔助列,首先使用以下公式按字母順序排列Condition 2
字母(將其向下拖動以應用於所有行):
=COUNTIF(Condition_2,"<="&Condition_2)
然后使用以下公式找到最佳匹配(雖然它是一個數組公式,但不需要通過Ctrl+Shift+Enter
):
=INDEX(Product1,MATCH(AGGREGATE(15,6,Helper/((Condition_1>=77)/(Condition_2>="H")),1),Helper,0))
用工作表中的實際范圍替換上述公式中的命名范圍。
替換,
為;
作為適合您系統的所有公式中的分隔符。
編輯#2
基於新的場景,這個問題可以通過AGGREGATE函數解決,只要查找值是一個數字( EAN
)
我上面例子的單元格J2
中的公式是:
=AGGREGATE(15,6,EAN/((DIMENSION=F2)/(LOAD_INDEX>=G2)/(SPEED_INDEX>=H2)),1)
請注意,以下所有命名范圍都需要替換為工作簿上的實際范圍:
B2:B8
C2:C8
D2:D8
A2:A8
如果您不想顯示錯誤#NUM!
如果沒有匹配的結果,您可以使用IFERROR返回一個空白單元格,如我示例的單元格J3
所示。 公式為:
=IFERROR(AGGREGATE(15,6,EAN/((DIMENSION=F3)/(LOAD_INDEX>=G3)/(SPEED_INDEX>=H3)),1),"")
編輯 #3
請使用以下數組公式(需要按Ctrl+Shift+Enter 確認)在Helper
列的幫助下找到最接近的LOAD INDEX
和SPEED INDEX
匹配項。
{=INDEX(EAN,MATCH(AGGREGATE(15,6,Helper/((LOAD_INDEX/((DIMENSION=G2)/(LOAD_INDEX>=H2)/(SPEED_INDEX>=I2)))=AGGREGATE(15,6,LOAD_INDEX/((DIMENSION=G2)/(LOAD_INDEX>=H2)/(SPEED_INDEX>=I2)),1)),1),Helper/((LOAD_INDEX/((DIMENSION=G2)/(LOAD_INDEX>=H2)/(SPEED_INDEX>=I2)))=AGGREGATE(15,6,LOAD_INDEX/((DIMENSION=G2)/(LOAD_INDEX>=H2)/(SPEED_INDEX>=I2)),1)),0))}
邏輯是首先找到與LOAD INDEX
最接近的匹配,然后從與LOAD INDEX
最接近匹配的范圍中找到與SPEED LIMIT
最接近的匹配。
如果您不想顯示#NUM!
沒有匹配結果的錯誤,您可以使用IFERROR返回所需的結果。
如果有任何問題,請告訴我。 干杯:)
這可能通過更聰明的方法來完成,但以下對我有用:
G2
公式,按照上述示例數據返回具有最佳匹配的行:
=INDEX(A2:A6,MATCH(SMALL(IF(B2:B6-E2>-1,B2:B6-E2+IF(CODE(C2:C6)-CODE(F2)>-1,CODE(C2:C6)-CODE(F2),""),""),1),IF(B2:B6-E2>-1,B2:B6-E2+IF(CODE(C2:C6)-CODE(F2)>-1,CODE(C2:C6)-CODE(F2),""),""),0))
注意通過Ctrl + Shift + Enter作為數組公式輸入
當沒有條件匹配時,它將返回錯誤,您可以通過IFERROR()
捕獲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.