1

如果使用 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 表示法......所以这就是我迄今为止所拥有的:

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'

如果我选择调试,它会突出显示上面的数组公式。

我只是使用 excel 设置将我的公式设置为 R1C1 表示法,所以在转换中可能会误入歧途。由于我不熟悉 R1C1 表示法,我希望更熟悉 R1C1 的人能帮助我解决此问题或为我指明方向,以便我可以解决此 VBA 问题。

谢谢。

4

1 回答 1

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
于 2012-08-10T17:51:00.537 回答