将数组公式引入单元格范围

我试图把数组公式应用到单元格范围内(“B2:B10”)公式应该返回多个依赖于单元格A2中的值的结果。 当我这样做正常的方式(按Ctrl,Shift键,进入)它工作正常,但是当我尝试用代码做它会返回相同的结果在每个单元格中find第一个实例。 任何人都可以帮我find我要找的结果吗?

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("$A$2").Address Then With Range("B2:B10") .FormulaArray = "=INDEX(Absence!$C$2:$C$151, SMALL(IF($A$2=Absence!$A$2:$A$151, ROW(Absence!$A$2:$A$151)-ROW(Absence!$A$2)+1), ROW(Absence!1:1)))" .Value = .Value End With End If End Sub 

这是更好的:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("$A$2").Address Then Range("B2").FormulaArray = "=INDEX(Absence!$C$2:$C$151, SMALL(IF($A$2=Absence!$A$2:$A$151, ROW(Absence!$A$2:$A$151)-ROW(Absence!$A$2)+1), ROW(Absence!1:1)))" Range("B2").Copy Range("B3:B10") Range("B2:B10").Value = Range("B2:B10").Value End If End Sub 

问题在于,您将数组input到所有单元格中,而不是将数组input第一个单元格并填充。 没有填充,行ROW(1:1)不会进行。 您需要将ROW(1:150)SMALL函数的所有可能的k值一次性放入。

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("$A$2").Address Then With Range("B2:B10") .FormulaArray = "=INDEX(Absence!$C$2:$C$151, SMALL(IF($A$2=Absence!$A$2:$A$151, ROW(2:151)-ROW(2:2)+1), ROW(1:9)))" .Value = .Value End With End If End Sub 

顺便说一句,当我们使用ROW(Absence!$A$2:$A$151)来实现一个介于2和151之间的数字时,工作表和列字母不是必需的。 ROW(2:151)会做得很好,稍微清理一下这个公式。