我需要创建给定开始/结束编号的迷你数组,然后将它们合并到一个数组中。
示例:
起始数字和结束数字是用户从表单输入的。
如何自动填充数组?
ws.Range("A1") = start_num
'stop at last number
ws.Range("A1").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=last_num, Trend:=False
此自动填充 A 列中的一个起始结束数字,但我宁愿将数据存储在数组中,并且只在电子表格上显示最终数组。
要使用一组不同的范围动态填充数组,我将使用 sub 和 ArrayList。要获取数组列表,您需要添加对 mscorlib 的引用,或者使用创建对象,例如创建对象(“数组列表”)
在模块级别
Public myAL as ArrayList
' or Public myAL as Object
Public sub Fill(byval ipStart as long, byval ipEnd as Long)
If myAL is nothing then
set myAL = new ArrayList
' or Set myAL = CreateObject("Arraylist")
end if
Dim myIndex as long
for myIndex = ipStart to ipEnd
myAL.add myIndex
next
end sub
然后您可以按如下方式使用它
Fill 2,6
Fill 12,15
Fill 20, 23
Dim myArray as variant
myArray = myAL.ToArray
请注意,ArrayList 对象不提供任何智能感知。
另一种仅在 VBA 中的解决方案是通过某种构建器类。
Dim al As ArrayList
Set al = New ArrayList
'array
Dim arr As Variant
arr = al.Join(2, 6).Join(12, 15).Join(20, 23).ToArray()
'string
Dim s As String
s = al.Join(2, 6).Join(12, 15).Join(20, 23).ToString()
'or simply once filled
s = al.ToString()
Debug.Print s
'2,3,4,5,6,12,13,14,15,20,21,22,23
ArrayList
班级:
Option Explicit
Private m_collection As Collection
Public Function Join(ByVal lower As Long, ByVal upper As Long) As ArrayList
Dim i As Long
For i = lower To upper
m_collection.Add i
Next
Set Join = Me
End Function
Public Function ToArray() As Variant
Dim arr() As Variant
ReDim arr(m_collection.Count - 1)
'Collection index statrts at 1.
Dim i As Long
For i = 1 To m_collection.Count
arr(i - 1) = m_collection(i)
Next
ToArray = arr
End Function
Public Function ToString(Optional ByVal delimiter As String = ",") As String
ToString = VBA.Join(ToArray(), delimiter)
End Function
Private Sub Class_Initialize()
Set m_collection = New Collection
End Sub
Private Sub Class_Terminate()
Set m_collection = Nothing
End Sub
您可以将
VB_PredeclaredId
设置为 true 以拥有单个实例,但您需要在每次填充后清除集合以避免重复。