我是 Excel 和 VBA 的新手,我遇到以下问题。
我正在处理一个定义在这样的Excel工作表中的宏:
https://drive.google.com/file/d/1R29ofaOfSlzqkcjFsAmWvry-knfv8zOn/view
正如您可以在此表中看到的那样,有一个名为 OUT MOVEMENT 的部分,由 H 列中的某些行组成, L 专栏。
我实现了这个宏,迭代并显示 K 列中的值,从 K3 单元格开始,直到最后一个单元格为值。
Sub ActualValue()
Dim outQuantityRange As Range
Set outQuantityRange = Range("K3", Range("K3").End(xlDown))
For Each currentOutQuantity In outQuantityRange.Cells
MsgBox (currentOutQuantity)
Next
End Sub
它工作正常,但我问是否可以使用VBA做一些更复杂的事情,如下面的行为:
将从 H 列开始到 L 列的所有行的内容放入数据结构中(整个** OUT MOVEMENT *部分的所有行)我的Excel表格。)
因此,这个数据结构(可以是一个列表或类似于将数据字段( H 列)作为键的哈希映射)必须包含一些“对象“,第一个将包含这样的东西:
(16/12/2017, -198,96 €, ETH, -0,3353050000, null)
第二个是这样的:
(21/12/2017, -93,98 €, ETH, -0,1400000000, null)
是否可以在VBA Excel宏中执行此类操作?
答案 0 :(得分:0)
我认为你所追求的是这样的:
Sub Concatenate_Data()
Dim LastRow as Integer, X as Integer, Y as Integer
LastRow = Range("K3").end(xldown).Row
Dim Data() As String
ReDim Data(1 to (LastRow - 2)) As String
For X = 3 to LastRow
Data(X - 2) = "(" & Range("H" & X).Value
For Y = 9 to 12
If Cells(X, Y) <> "" Then
Data(X - 2) = Data(X - 2) & ", " & Cells(X, Y)
Else
Data(X - 2) = Data(X - 2) & ", null"
End If
Next Y
Data(X - 2) = Data(X - 2) & ")"
MsgBox Data(X - 2)
Next X
End Sub
答案 1 :(得分:0)
您可以定义记录结构并制作它们的数组。例如。把它放在你的代码之外:
Type tst
dat as Date
cur as Currency
s1 As String
dbl As Double
s2 As String
End Type
然后以这种方式使用它:
Dim buffer() As tst
<...>
ReDim buffer(1 To 100)
<...>
buffer(1).dat = Cells(3, "H")
buffer(1).cur = Cells(3, "I")
etc.
请注意,在此解决方案中,您需要处理数据类型,因为如果Cells(3,“H”)不是日期类型,宏将会出错。如果可能发生,请使用CDate功能(和CCur,CDbl等,请参阅此处:Conversional functions)或在方便时查看内容。
如果您不关心单元格的内容,那么利用Variant类型可能更方便,但是您不需要使用Type
定义,您可以简单地使用2个暗淡的数组,如Dim buffer (1 to 100, 1 to 5) as Variant
,例如:
ReDim buffer(1 To 72,1 To 5)
<...>
buffer(1,1) = Cells(3, "H")
buffer(1,2) = Cells(3, "I")
etc.