我正在处理我的第一个VBA功能。目标是有一个接受两个整数作为输入的函数,并输出一个包含两个输入之间所有整数的数组(包括端点)。
示例:如果输入5和9,则输出应为5,6,7,8,9的数组。
VBA似乎没有任何其他语言习惯的对象或功能。 Python有一个range()函数,但我所知道的大多数其他语言都有类似列表的类型,可以附加到。这在VBA中如何运作?
我不打算创建一个Excel范围,而是一个包含两个值之间范围的数组。
答案 0 :(得分:2)
如果您询问细胞多重范围,那么您可以使用它:
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
输出
A5:A9
如果你不询问cell.range但是关于数组范围,那么你可以使用它:
Sub test2()
Dim nStart&, nEnd&
Dim Rng() As String, i&
nStart = 5: nEnd = 9
For i = 0 To nEnd - nStart
ReDim Preserve Rng(i)
Rng(i) = nStart
nStart = nStart + 1
Next i
For i = 0 To UBound(Rng)
Debug.Print Rng(i)
Next i
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
最后两个变体的输出将是相同的
5
6
7
8
9
答案 1 :(得分:2)
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
答案 2 :(得分:0)
仅适用于Excel的上下文(不确定基于问题和标签)
如果您想要一个不涉及数组的单线程,您可以利用Excel中的ROW
函数和Application.Evaluate
。
<强>代码强>
Function RangeArr(int_start As Integer, int_end As Integer) As Variant
RangeArr = Application.Transpose( _
Application.Evaluate("=ROW(" & int_start & ":" & int_end & ")"))
End Function
<强>结果