自定义函数将结果数组输入到不同的单元格中

时间:2016-07-21 16:53:00

标签: excel vba excel-vba excel-2013

我已经创建了自己的函数来确定将值之间的值计算为给定值,增量为30,如此处所示

Function InBetween(First As Integer, Last As Integer)
Dim i As Long, F As String, a() As String
F = First
For i = First + 30 To Last Step 30
F = F & "|" & i
Next i
InBetween = F
End Function

当我使用这个函数时,我现在让它以“1 | 2 | 3 | 4”的格式返回公式输入的单元格中的结果数组。有没有办法让这个数组填充到包含公式的单元格下面的单元格中?

注意:我不想在单元格中使用公式,因为我需要在将来使用结果而不是公式的方程中引用单元格。

1 个答案:

答案 0 :(得分:0)

这非常困难。起初我尝试使用application.caller从函数调用sub来影响下面的单元格但是这总是返回#value错误。似乎UDF无法运行任何影响工作表的内容。

最终我想出了这个:

通过将此工作表更改事件粘贴到vb:

中的工作表对象中来创建工作表更改事件
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Left(Target.Offset(-1, 0).Formula, 10) = "=InBetween" Then Call DoX(Target.Offset(-1, 0), InBetween(10, 60))
On Error GoTo 0
End Sub

然后将其粘贴到模块中

Sub DoX(r As Range, val As String)

Sheets(r.Parent.Name).Cells(r.Row, r.Column) = ""
Sheets(r.Parent.Name).Cells(r.Row + 1, r.Column) = val

End Sub

然后正常使用您的功能,但请记住在输入后点击返回,以便活动单元格是您输入公式的下方单元格。