数组公式进入单元格范围

时间:2017-03-21 22:26:22

标签: excel vba excel-vba

我正在尝试将数组公式放入一系列单元格中(“B2:B10”)公式应返回多个结果,具体取决于单元格A2中的值。当我以正常方式(ctrl,shift,enter)执行它时,它可以正常工作,但是当我尝试使用代码时,它会在每个单元格中返回相同的结果,这是找到的第一个实例。任何人都可以帮助我得到我正在寻找的结果吗?

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

2 个答案:

答案 0 :(得分:2)

这是否更好:

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

答案 1 :(得分:2)

问题在于您将阵列一次性输入到所有单元格中,而不是将数组输入第一个单元格并填充。如果没有填写,ROW(1:1)就没有了。您需要使用k一次性将SMALL函数的所有可能ROW(1:150)值放入。

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)会做得很好并清理一下公式。