Excel VBA - Разделение элементов одномерного массива по фиксированной ширине - PullRequest
0 голосов
/ 18 мая 2018

Предположим, у меня есть данные в диапазоне A1: A100.Я хотел бы разделить каждую ячейку в диапазоне на несколько столбцов по фиксированной ширине, например (0-10,10-15,15-37).Я мог бы использовать функцию Text-to-Columns в 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 столбца, но разделив исходные данные вуказанные точки, например, как подход «текст к столбцу».Но эти подходы, похоже, не работают.

Я пытался найти ответ на этот вопрос, но, похоже, ничего не нашел

Любая помощь будет оценена, спасибо

1 Ответ

0 голосов
/ 18 мая 2018

В дополнение к правильной подсказке Скотта в комментарии вы можете использовать один только массив полей данных (на основе трех столбцов) и выполнить обратный цикл, разбив первый «столбец»:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...