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

Arrays Excel VBA-按固定宽度分隔一维数组的元素,arrays,excel,vba,Arrays,Excel,Vba,假设我有A1:A100范围内的数据。我想将范围内的每个单元格按固定宽度拆分为多个列,例如(0-10,10-15,15-37)。我可以在vba和excel本身中使用“文本到列”功能 我的问题是,如果我在VBA中首先将范围传递给数组: Dim my Array as Variant myArray = Range("A1:A100").value 我将如何应用以下逻辑: myNewArray = Array(myArray(0,10),myArray(10,15),myArray(15,37))

假设我有A1:A100范围内的数据。我想将范围内的每个单元格按固定宽度拆分为多个列,例如(0-10,10-15,15-37)。我可以在vba和excel本身中使用“文本到列”功能

我的问题是,如果我在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列的新数组,但在指定点拆分了初始数据,就像文本到列的方法一样。但这些方法似乎不起作用

我试图寻找这个问题的答案,但似乎什么也找不到

任何帮助都将不胜感激,
谢谢除了Scott在评论中的正确提示之外,您可以只使用一个数据字段数组(基于三列),并对第一个“列”执行反向循环拆分:

选项显式
分拆()
将ws设置为工作表

设置ws=ThisWorkbook.Worksheets(“MySheet”)“如果您正确地引用了
myArray
,第二种方法将起作用。即使该数组引用的是单个列,它也是二维数组。因此,请使用
myArray(i,1)
同时Mid从
1
开始,而不是
0
,第一个字符中只有
9
,除非您希望10个字符被使用两次。@ScottCraner感谢您的建议,按照建议进行编辑,似乎仍然给出了一个错误,无效的过程调用,不确定是什么原因,非常感谢!工作完美,非常简洁的代码…将适应我的数据,再次感谢
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