VBA-在一行中设置多维数组值
好的,所以我将使用Python创建一个多维列表,并在一行代码上设置值(如下所示) 我喜欢在一行上设置值的方式。在VBA中,我通过以下方式完成此操作:VBA-在一行中设置多维数组值,vba,multidimensional-array,Vba,Multidimensional Array,好的,所以我将使用Python创建一个多维列表,并在一行代码上设置值(如下所示) 我喜欢在一行上设置值的方式。在VBA中,我通过以下方式完成此操作: Dim aryTitle(0 To 1, 0 To 1) As String aryTitle(0, 0) = "Description" aryTitle(0, 1) = "Value" aryTitle(1, 0) = "Description2" aryTitle(1, 1) = "Value2" MsgBox (aryTitle(0, 0)
Dim aryTitle(0 To 1, 0 To 1) As String
aryTitle(0, 0) = "Description"
aryTitle(0, 1) = "Value"
aryTitle(1, 0) = "Description2"
aryTitle(1, 1) = "Value2"
MsgBox (aryTitle(0, 0) & aryTitle(0, 1))
有没有办法在一行代码中设置值 不是本地的,不是。但是你可以为它编写一个函数。Python能够做到这一点的唯一原因是有人编写了一个函数。不同之处在于,他们可以访问源代码,因此可以随意生成语法。您将仅限于VBA函数语法。这里有一个创建二维阵列的函数。从技术上讲,这不是“一行代码”,但把它扔进你的Mutrilities模块,忘掉它,它会感觉像一行代码
Public Function FillTwoDim(ParamArray KeyValue() As Variant) As Variant
Dim aReturn() As Variant
Dim i As Long
Dim lCnt As Long
ReDim aReturn(0 To ((UBound(KeyValue) + 1) \ 2) - 1, 0 To 1)
For i = LBound(KeyValue) To UBound(KeyValue) Step 2
If i + 1 <= UBound(KeyValue) Then
aReturn(lCnt, 0) = KeyValue(i)
aReturn(lCnt, 1) = KeyValue(i + 1)
lCnt = lCnt + 1
End If
Next i
FillTwoDim = aReturn
End Function
Sub test()
Dim vaArr As Variant
Dim i As Long
Dim j As Long
vaArr = FillTwoDim("Description", "Value", "Description2", "Value2")
For i = LBound(vaArr, 1) To UBound(vaArr, 1)
For j = LBound(vaArr, 2) To UBound(vaArr, 2)
Debug.Print i, j, vaArr(i, j)
Next j
Next i
End Sub
您可以编写一个助手函数:
Function MultiSplit(s As String, Optional delim1 As String = ",", Optional delim2 As String = ";") As Variant
Dim V As Variant, W As Variant, A As Variant
Dim i As Long, j As Long, m As Long, n As Long
V = Split(s, delim2)
m = UBound(V)
n = UBound(Split(V(0), delim1))
ReDim A(0 To m, 0 To n)
For i = 0 To m
For j = 0 To n
W = Split(V(i), delim1)
A(i, j) = Trim(W(j))
Next j
Next i
MultiSplit = A
End Function
这样使用:
Sub test()
Dim A As Variant
A = MultiSplit("Desciption, Value; Description2, Value2")
Range("A1:B2").Value = A
End Sub
据我所知,如果工作表中有值,可以使用循环将值添加到数组中。定义“在一行上”。你是说一行Excel单元格吗?可以使用Range命令执行此操作,该命令基于行和列选择单元格。使用循环遍历列,并将Range.formula方法更改为aryTitle(x,y)。如果需要二维数组,请使用
库
对象。它提供了键值对
并且更容易调整大小。对不起-我现在明白你的意思是“在一行代码中设置它”而不是“在一行Excel单元格中设置值”。我的评论与此无关。请注意,如果您的值已经作为一个区域[Excel单元格组]存在于工作表中,您可以直接将整个区域复制到另一个区域,但我不相信您可以直接使用字符串数组来实现这一点;循环可能是您唯一的选择。arytile=Array(Array(“description”、“Value”)、Array(“Description2”、“Value2”))
。。。但这将为您提供Debug.Print(aryTitle(0)(0)+“:“+aryTitle(0)(1))
。
Function MultiSplit(s As String, Optional delim1 As String = ",", Optional delim2 As String = ";") As Variant
Dim V As Variant, W As Variant, A As Variant
Dim i As Long, j As Long, m As Long, n As Long
V = Split(s, delim2)
m = UBound(V)
n = UBound(Split(V(0), delim1))
ReDim A(0 To m, 0 To n)
For i = 0 To m
For j = 0 To n
W = Split(V(i), delim1)
A(i, j) = Trim(W(j))
Next j
Next i
MultiSplit = A
End Function
Sub test()
Dim A As Variant
A = MultiSplit("Desciption, Value; Description2, Value2")
Range("A1:B2").Value = A
End Sub