我正在尝试将数组公式放入一系列单元格中(“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
答案 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)
会做得很好并清理一下公式。