假设我的数据位于 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 行 x 3 列的新数组,但会在指定点拆分初始数据,就像文本到列方法一样。但这些方法似乎不起作用。
我尝试寻找这个问题的答案,但似乎找不到任何东西
如有任何帮助,我们将不胜感激, 谢谢
最佳答案
除了 Scott 在评论中的正确提示之外,您还可以仅使用 一个 数据字段数组(基于三列)并执行反向循环拆分第一个“列”:
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
关于arrays - Excel VBA - 按固定宽度分隔一维数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50416668/