2016-04-25 105 views
0

我有一個如下所示的數據集。 E欄是我的公式欄。我希望列E讀取「最大」行,其中ID包含該狀態的最大概率。如果同一州的兩個ID具有相同的概率,如馬里蘭州,我希望「Max」顯示最近日期的ID。如果兩個ID在概率和日期上都匹配,那麼我希望「Max」只出現在每個國家組中的一個ID上。Excel - 只選擇一個最大值

Column A  Column B  Column C Column D Column E 
    State  Probability  Date  ID  Formula Field 
    California  10%  12/31/2016 123 
    California  20%  1/7/2017  129 
    California  23%  1/14/2017  135  Max 
    Colorado   26%  1/21/2017  141 
    Colorado   38%  12/31/2016 147  Max 
    Illinois   44%  1/14/2017  153  Max 
    Illinois   44%  1/14/2017  159 
    Illinois   20%  1/21/2017  165 
    Illinois   35%  1/28/2017  171 
    Maryland   41%  2/4/2017  177 
    Maryland   41%  12/31/2016 183  Max 
    Maryland   35%  1/7/2017  189 
    Michigan   20%  1/14/2017  195 
    Michigan   35%  1/21/2017  201 
    Michigan   38%  1/28/2017  207  Max 
    West Virginia  41%  2/4/2017  213 
    West Virginia  44%  2/11/2017  219  Max 
+1

不能把你從[最後一個問題的式(http://stackoverflow.com/questions/36554050/multi-criterion-max-if-statement)在IF()函數:'= IF(OldFormula,「Max」,「」)' –

+1

你可以在我的上一個答案中加上另一個COUNTIFS來忽略結果,如果已經有一個相同狀態和概率的MAX,它就會高於它 –

回答

3

下面是新配方:

=IF(D2=MIN(IF((ABS($C$2:$C$18-$H$1)=MIN(IF(($A$2:$A$18=A2)*($B$2:$B$18=MAX(IF(($A$2:$A$18=A2),$B$2:$B$18))),ABS($C$2:$C$18-$H$1))))*($A$2:$A$18=A2),$D$2:$D$18)),"Max","") 

這是數組公式。作爲一個數組,它必須使用Ctrl-Shift-Enter進行確認。如果做得不錯,excel會在公式的周圍放置{}

​​

根據您的意見時,ID是文本下面的公式將工作。

爲了得到第一排在標準匹配,當有重複:

=IF(ROW(D2)=MIN(IF((ABS($C$2:$C$18-$H$1)=MIN(IF(($A$2:$A$18=A2)*($B$2:$B$18=MAX(IF(($A$2:$A$18=A2),$B$2:$B$18))),ABS($C$2:$C$18-$H$1))))*($A$2:$A$18=A2),ROW($D$2:$D$18))),"Max","") 

爲了把 「最大」 的中時有一搭:

=IF((ABS(C2-$H$1)=MIN(IF(($A$2:$A$18=A2)*($B$2:$B$18=MAX(IF(($A$2:$A$18=A2),$B$2:$B$18))),ABS($C$2:$C$18-$H$1))))*($A$2:$A$18=$A$2:$A$18),"Max","") 

enter image description here

+0

什麼是「$ H $ 1「在這裏?那是今天嗎? – sqlbg

+0

@sqlbg是的,對不起,我應該在屏幕截圖中包含它,但它只是'= TODAY()'。今天是易變的,我們想限制它直接使用的次數。 –

+0

我看到您的公式在應用於我的樣本數據時的工作方式。但是,當應用到我的實際數據時,我一直沿着E列空白。樣本數據和實際數據之間唯一的區別是「ID」實際上是一個文本字段(因爲它包含字母)而不是數字字段。這在你的公式中是否重要? – sqlbg

0

這可能有幫助,但它有點麻煩。函數的返回顯然不能爲空,所以在其他所有行中都會有0。但是,如果您使用此功能,則必須爲每個組選擇相同的範圍。 ** 此外,該函數必須位於其旁邊的列中,否則您將不得不在編輯偏移量中的函數,然後查看您想要查看的很多列。

Link to Excel sheet screenshot

Function FindMaxByState(rng As Range) 
Dim cell As Range 
Dim value As Double 

value = 0 

For Each cell In rng 
If IsNumeric(cell.value) Then 
    If cell.value > value Then 
     value = cell.value 
    End If 
End If 

Next cell 

If ActiveCell.Offset(0, -1).value = value Then 
    FindMaxByState = "Max" 
Else 
    FindMaxByState = 0 
End If 

End Function 
1

使用我的previous answer中使用的COUNTIFS方法,

=IF(COUNTIFS($A$2:$A$100,$A2,$B$2:$B$100,">"&$B2) 
+COUNTIFS($A$2:$A$100,$A2,$B$2:$B$100,$B2,$C$2:$C$100,"<"&$G$2+DATEDIF($G$2,$C2,"d")) 
+COUNTIFS($A$1:$A1,$A2,$E$1:$E1,"MAX"), 
"","MAX") 

enter image description here