我通过循环遍历工作表中的单元格(originalWS)在vba中创建一个数组。因此,假设单元格(2,5)到(2,12)具有以下内容:
(2,5)Item
(3,5)Type
(4,5)Nominal Diameter
(5,5)Lead
.
.
.
(12,5)For Use with End Blocks
因此,当我循环使用下面的代码时,我得到一个如下所示的数组:
[项目,类型,公称直径,铅,......,用于结束块]。
但是,我想在我的数组中的每个值之间添加两个空格。所以它看起来像这样:
[Item,“”,“”,Type,“”,“”,Nominal Diameter,“”,“”,Lead,“”,“”,......,适用于端块,“”, “”]
ReDim propertyArr(1, lastRow)
For i = 1 To lastRow
propertyArr(1, i) = originalWS.Cells(i + 1, 5).Value
Debug.Print propertyArr(1, i)
Next
我试图通过数组的最终总大小循环到(lastRow * 3)并向前走3.然而,我很难弄清楚如何重置我的orginalWS.cells(我,5)值,使它们是连续的。
换句话说,当我循环步进3时,我的值将是:
propertyArr(1,1) = originalWS.Cells(2,5).value
propertyArr(1,4) = originalWS.cells(5,5).value
propertyArr(1,7) = originalWS.cells(8,5).value
我如何循环以便每2个位置将值存储在数组中,同时从表格中的连续列表中获取值。
我可以在不添加额外空行的情况下执行此操作 一种在原始循环中的每个值之间添加两个空格而不必添加额外空行的方法吗?
或者,我可以在第一次创建数组后在每个值之间添加两个空格?
答案 0 :(得分:5)
这应该可以解决问题,
Dim lRowNo As Long
lRowNo = lastRow * 3
ReDim propertyArr(1, lRowNo)
For i = 1 To lRowNo
If i Mod 3 = 1 Then
propertyArr(1, i) = originalWS.Cells(i + 1, 5).Value
Else
propertyArr(1, i) = ""
End If
Debug.Print propertyArr(1, i)
Next
答案 1 :(得分:2)
类似的东西:
Sub ytrewq()
Dim propertyArr(), lastRow As Long
Dim originalWS As Worksheet
Set originalWS = ActiveSheet
lastRow = 5
ReDim propertyArr(1, 2 * lastRow)
For i = 1 To 2 * lastRow Step 2
propertyArr(1, i) = originalWS.Cells(i + 1, 5).Value
propertyArr(1, i + 1) = ""
Debug.Print propertyArr(1, i)
Next
End Sub
<强> UNTESTED 强>
答案 2 :(得分:1)
您也可以稍微展开循环以更有效地执行此操作。请注意,对于每次迭代,i
不会增加1
,而是增加3
。
Public Sub test()
Dim lastRow As Long
lastRow = 6
Dim lastIndex As Long
lastIndex = lastRow * 3
ReDim propertyArr(1 To lastIndex)
Dim i As Long
For i = 1 To lastIndex Step 3
propertyArr(i) = CInt(i / 3)
propertyArr(i + 1) = vbNullString
propertyArr(i + 2) = vbNullString
Next
End Sub
答案 3 :(得分:1)
或没有循环
Dim ws As Worksheet
Set ws = Sheets(1)
propertyarr = Join(Application.Transpose(ws.Range("E1:E5")), ","""","""",")
放回数组
propertyarr = Split(Join(Application.Transpose(ws.Range("E1:E5")), ",,,"), ",")
答案 4 :(得分:0)
我想出了答案。我没有正确更新我需要的细胞。请参阅以下代码:
count = 3
lastIndex = lastRow * 3
ReDim propertyArr(1, lastIndex)
For i = 1 To lastIndex Step 3
propertyArr(1, i) = originalWS.Cells((count - 1), 5)
count = count + 1
Next