使用Excel 2007在VBA中的ArrayFormula

时间:2012-08-10 17:40:42

标签: excel-vba excel-2007 vba excel

如果使用ctrl sht enter:

输入,则此数组公式可以正常工作
={IF(ROWS(A$7:A7)>A$4,"",IF(SUMPRODUCT((consumers=$A$6)*(data=A$5)*(data=A$5<>""))>0,INDEX 
(employees,SMALL(IF(((consumers=$A$6)*(data=A$5)*(data=A$5<>"")),COLUMN(Data!$B$2:$AC$2)-COLUMN 
(Data!$B$2)+1),ROWS(A$7:A7)))))}

我做了一些研究,并且读到如果我想在VBA中使用这个公式,我将不得不使用R1C1 notatation ...所以这就是我到目前为止:

Sub frmarry()
   Range("y28").Select
   Selection.FormulaArray = "=IF(ROWS(R28C25:R28C25)>R26C25,"",IF(SUMPRODUCT((consumers=R27C25)* 
   (data=R24C7)*(data=R24C7<>""))>0,INDEX(staff,SMALL(IF(((consumers=R27C25)*(data=R24C7)* 
   (data=R24C7<>"")),COLUMN(Data!$R2C2:$R2C29)-COLUMN(Data!R2C2)+1),ROWS(R28C25:R28C25)))))"
End Sub

现在,当我运行例程时,我得到一个标志:

  'unable to set the FormaulaArray property of the Range class'

如果我选择debug,它会突出显示上面的arrayformula。

我只是使用excel设置将我的公式设置为R1C1表示法,因此可能在转换中出现了误入歧途的情况。由于我不熟悉R1C1表示法,因此我希望有人能更熟悉R1C1,这可以帮助我解决这个问题,或者指出我的方向,这样我就可以解决这个VBA问题。

感谢。

1 个答案:

答案 0 :(得分:2)

试试这个。这工作

Sub frmarry()
    Range("Y28").FormulaArray = _
    "=IF(ROWS(R28C25:R28C25)>R26C25,"""",IF(SUMPRODUCT((consumers=R27C25)*" & _
    "(data=R24C7)*(data=R24C7<>""""))>0,INDEX(staff,SMALL(IF(((consumers=R27C25)" & _
    "*(data=R24C7)*(data=R24C7<>"""")),COLUMN(Data!R2C2:R2C29)-COLUMN(Data!R2C2)" & _
    "+1),ROWS(R28C25:R28C25)))))"
End Sub