假设我的数据范围为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列的新数组,但会在指定的点分割初始数据,就像文本到列的方法一样。但这些方法似乎不起作用。
我试过寻找答案,但似乎找不到任何东西
任何帮助将不胜感激, 感谢
答案 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