2017-02-10 57 views
1

最大值我有一個表中的Excel工作表是這樣的:獲取從查找表

Index Threshold 
1  0 
2  10 
3  20 
... 

然後我有值的另一個表:

Values 
5 
11 
14 
22 

我要的是實現一個公式將「值」映射到可能不超過「閾值」的最大「索引」,例如:

Values Threshold Index 
5  -> 0   -> 1 
11  -> 10  -> 2 
14  -> 10  -> 2 
22  -> 20  -> 3 

我認爲我可以實現一個IF()的二叉樹,其代價爲log(n),但是它非常繁瑣且難以處理。例如(T*的閾值,V*是價值觀和I*是指數):

IF(V1 < T3;IF(V1 < T2;I1;I2);IF(V1 < T4;I3;I4)) 

這是一個平衡的IF()樹,如:

  T3 
     / \ 
    T2  T4 
    /\ /\ 
    I1 I2 I3 I4 

有沒有更好的(更可用)的方式來實現這一?

這只是我正在工作的實際工作表的要點。真實的數據是二維的,分佈在很多頁面上,並且遠遠更大(數百個閾值和數千個值)。

特別是複製&粘貼很難處理(創建,測試和維護)。


編輯:實際的解決方案

所以,這就是問題的一些研究之後,我想表明我工作的解決方案。 MATCH()函數是基本的,但還不夠。

首先,閾值並不表示的最大允許值,而是的最小要求值。因此該標題具有誤導性。我所要做的是:

  • 反轉閾值範圍;
  • 使用MATCH()-1比較類型。

爲了逆轉我用這個公式的範圍內,佔細胞在F2:F102範圍:

INDEX(C$2:C$102;COUNTA(C:C)+1-ROW()) 

爲了匹配我使用:

MATCH(D2;F$2:F$102;-1) 

這最後一個匹配是不INDEX()因爲返回抵消已經是我需要的。

感謝Scott Craner讓我走上正軌!

回答

1

使用INDEX/MATCH:

=INDEX(A:A,MATCH(E2,B:B,1)) 

您可能需要使用;而不是,爲本地設置:

=INDEX(A:A;MATCH(E2;B:B;1)) 

enter image description here

+0

很不錯的!我只是在一個較小的數據集上測試它,通常它可以工作,但有索引錯誤。所有值都是整數,錯誤只出現在更高的值中。對於'T = 5,V = 4',它給了我以前的索引'I = 4',而不是正確的'I = 5'。任何想法如何可以?我不能只添加'+ 1',因爲對於較低的值('V <4'),這是正確的。手動調整它會使下半部分變成錯誤:( – pid

+0

我不得不離開,並且不會回來幾個小時,我不理解。如果我在E3中放置了'10',它會給我2,如果它是1 ? –

+0

不,2是正確的,我正在處理的是更復雜的數據,但是我可以通過使用中間校正公式來管理它,'MATCH()'是我需要的,所以這個問題被接受並完成了!非常感謝你,不介意以前的評論:) – pid