2016-08-11 42 views
0

我有如下信息工作表:替代馬克斯如果與formulaArray

| A | B | C | 
| 10 | cat |   | 
| 15 | cat |   | 
| 5 | dog |   | 
| 4 | dog |   | 
| 11 | dog |   | 
| 6 | fish |   | 
| 10 | fish |   | 

我想找出是根據值到B列將它們分組在A列中的最大值。也就是說,貓,狗和魚的最大值。

我想使用的功能FormulaArrayMaxIf功能:

mysheet.range("C1:C7").FormulaArray="=Max(If(R1C2:R7C2=RC[-1],R1C1:R7C1))" 

我測試它,但它不工作,此公式僅比較與整個範圍(B1所述第一元件(B1): B7)。

有沒有更好的答案?

+1

爲什麼不直接'mysheet.range。( 「C1:C7」)式= 「= SUMPRODUCT(MAX((R1C2:R7C2 = RC [-1])* R1C1:R7C1))」? ' –

回答

0

你可以使用的MAXINDEX組合是這樣的:

enter image description here

+1

或者沒有'INDEX'作爲數組公式:'= MAX(($ B $ 1:$ B $ 7 = B1)* $ A $ 1:$ A $ 7)' –

+0

如果它是一個數組公式, OP目前的實施。看到我的答案。 – JMcD

+0

@JMcD - 謝謝,我提供了一個替代基於數組公式的答案;我認爲OP會更喜歡數組公式,儘管如此,每個問題。 –

0

數組公式可以返回單個結果或多個結果。您希望您的範圍內的每個單元格返回單個結果,但由於您將數組公式應用於整個範圍,因此它將被解釋爲在整個範圍內返回多個結果而不是單個公式的單個公式每個單元格。

你可以通過改變你的數組範圍內的東西來測試它。假設在C3中將「,0)」更改爲「1)」。它會告訴你,你不能改變數組的一部分。他們都連接在一起。

你需要做的是循環你的範圍中的單元格,並將公式應用到它們中的每一個。

Dim r As Range 
Dim rFormulas As Range 
Set rFormulas = ActiveSheet.Range("C2:C8") 
For Each r In rFormulas.Cells 
    r.FormulaArray = "=MAX(IF(R2C2:R8C2=RC2,R2C1:R8C1,0))" 
Next r 
+0

這是正確的,但因爲我得到了一個循環內2000行每張我需要一個快速的方法來做到這一點。 –