在VBA中创建范围

在VBA中创建范围,vba,range,Vba,Range,我正在研究我的第一个VBA函数。目标是让函数接受两个整数作为输入,并输出一个包含两个输入(包括端点)之间所有整数的数组 示例:如果输入5和9,则输出应该是5、6、7、8、9的数组 VBA似乎没有我在其他语言中使用过的任何对象或函数。Python有一个range()函数,但我所知道的大多数其他语言都有类似列表的类型,可以附加到该类型。这在VBA中是如何工作的 我不是要创建Excel范围,而是要创建一个数组,其中包含两个值之间的范围。如果您询问有关单元格的多个范围,则可以使用以下内容: Sub te

我正在研究我的第一个VBA函数。目标是让函数接受两个整数作为输入,并输出一个包含两个输入(包括端点)之间所有整数的数组

示例:如果输入5和9,则输出应该是5、6、7、8、9的数组

VBA似乎没有我在其他语言中使用过的任何对象或函数。Python有一个range()函数,但我所知道的大多数其他语言都有类似列表的类型,可以附加到该类型。这在VBA中是如何工作的


我不是要创建Excel范围,而是要创建一个数组,其中包含两个值之间的范围。

如果您询问有关单元格的多个范围,则可以使用以下内容:

Sub test1()
    Dim nStart&, nEnd&
    Dim Rng As Range
    nStart = 5: nEnd = 9
    Set Rng = Range("A" & nStart)
    While nStart <> nEnd
        Set Rng = Union(Rng, Range("A" & nStart + 1))
        nStart = nStart + 1
    Wend
    Debug.Print Rng.Address(0, 0)
End Sub
或者,您可以使用:

Sub test3()
    Dim nStart&, nEnd&
    Dim Rng As Object, key As Variant
    Set Rng = CreateObject("Scripting.Dictionary")
    nStart = 5: nEnd = 9
    While nStart <> nEnd + 1
        Rng.Add nStart, Nothing
        nStart = nStart + 1
    Wend
    For Each key In Rng
        Debug.Print key
    Next key
    Set Rng = Nothing
End Sub

仅适用于Excel的上下文(根据问题和标记不确定)

如果您想要一个不处理数组的单行程序,可以利用
函数和
应用程序。在Excel中评估

代码

Function RangeArr(int_start As Integer, int_end As Integer) As Variant

    RangeArr = Application.Transpose( _
                    Application.Evaluate("=ROW(" & int_start & ":" & int_end & ")"))

End Function
结果


在VBA中,您可以将数组重新定义为所需大小,然后填充它。谢谢这很好。我将在我的问题中澄清,我不是指Excel范围。
 5 
 6 
 7 
 8 
 9 
Function RangeArray(startAt As Long, endAt As Long) As Long()
    Dim arr() As Long, i As Long, n As Long
    n = endAt - startAt
    ReDim arr(0 To n)
    For i = 0 To n
        arr(i) = startAt + i
    Next i
    RangeArray = arr
End Function

Sub Tester()
    Dim arr
    arr = RangeArray(5, 10)
    Debug.Print arr(LBound(arr)), arr(UBound(arr))
End Sub
Function RangeArr(int_start As Integer, int_end As Integer) As Variant

    RangeArr = Application.Transpose( _
                    Application.Evaluate("=ROW(" & int_start & ":" & int_end & ")"))

End Function