替代Max If with formulaArray

时间:2016-08-11 01:32:51

标签: excel excel-vba excel-formula vba

我有一个包含以下信息的工作表:

|    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)。

有没有更好的答案?

2 个答案:

答案 0 :(得分:0)

您可以像这样使用MAXINDEX的组合:

enter image description here

答案 1 :(得分:0)

数组公式可以返回单个结果或多个结果。您希望自己为范围内的每个单元格返回单个结果,但由于您将数组公式应用于整个范围,因此它被解释为单个公式,在整个范围内返回多个结果而不是单个结果每个细胞的配方。

您可以通过更改数组范围内的内容来测试它。比如说,改变",0)"到",1)"在C3。它会告诉你,你不能改变数组的一部分。他们全都联系在一起。

您需要做的是遍历您范围内的细胞并将公式应用于每个细胞。

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