Excel VBA - 按固定宽度分隔一维数组的元素

时间:2018-05-18 17:39:16

标签: arrays excel excel-vba vba

假设我的数据范围为A1:A100。我想将范围内的每个单元格拆分为多列,固定宽度,例如(0-10,10-15,15-37)。我可以在vba和excel中使用Text-to-Columns函数。

我的问题是,如果我首先在VBA中将范围传递给数组:

Dim my Array as Variant
myArray = Range("A1:A100").value

我将如何应用以下逻辑:

myNewArray = Array(myArray(0,10),myArray(10,15),myArray(15,37))

或者可能是这样的:

for i=1 to 100
    myNewArray(i,1) = mid(myArray(i),0,10)
    myNewArray(i,2) = mid(myArray(i),10,5)    
    myNewArray(i,3) = mid(myArray(i),15,22)
next

这会产生一个包含100行乘3列的新数组,但会在指定的点分割初始数据,就像文本到列的方法一样。但这些方法似乎不起作用。

我试过寻找答案,但似乎找不到任何东西

任何帮助将不胜感激, 感谢

1 个答案:

答案 0 :(得分:2)

除了Scott在评论中的正确提示之外,您还可以使用一个数据字段数组(基于三列)并执行反向循环拆分第一个"列&# 34;:

Option Explicit

Sub Split_them()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("MySheet") ' << change to your sheet name
Dim i As Long, j As Long
Dim v
Dim a(): a = Array(0, 11, 16, 38)   ' Fixed Widths (first item zero)
v = ws.Range("A1:C100")
For i = 1 To UBound(v, 1)
    For j = 3 To 1 Step -1
        v(i, j) = Mid(v(i, 1), a(j - 1) + 1, a(j) - a(j - 1))
    Next j
Next i
' write back to sheet
ws.Range("A1:C100").Offset(0, 2) = v
End Sub