Обработка строк в VBA - PullRequest
       1

Обработка строк в VBA

0 голосов
/ 08 февраля 2019

Предположим, у вас есть следующая таблица Excel

image

Я пытаюсь написать макрос в VBA, который сканирует ячейки в столбце маршрутизации и распределяет подстроки в другиеколонны.Таким образом, это должен быть окончательный результат

image

Потенциально, если алгоритм находит n подстрок в основной строке под столбцом Rtg, он должен заполнить n столбцов подстроками.

Можете ли вы, ребята, помочь мне?

Заранее спасибо

Ответы [ 4 ]

0 голосов
/ 08 февраля 2019

Похоже, что ни одно из других решений не работает правильно с начальными дефисами.

Это должно касаться начальных / конечных / двойных дефисов в выбранных в данный момент ячейках в одном столбце.Предостережение заключается в том, что отдельные подстроки не должны содержать пробелов.

Sub splitHyphens()

    Dim i As Long, sel As Range, vals As Variant

    For Each sel In Selection

        vals = Split(Application.Trim(Replace(sel.Value, "-", Space(1))), Space(1))
        sel.Offset(0, 1).Resize(1, UBound(vals) + 1) = vals


    Next sel

End Sub
0 голосов
/ 08 февраля 2019

Мы можем выполнить синтаксический анализ, используя символ тире :

Sub dural()
    Dim i As Long, N As Long
    N = Cells(Rows.Count, "B").End(xlUp).Row
    For i = 2 To N
        arr = Split(Cells(i, 2).Value, "-")
        Cells(i, 2).Offset(0, 1).Resize(1, UBound(arr) + 1) = arr
    Next i
End Sub

enter image description here

РЕДАКТИРОВАТЬ # 1:

Код будет ошибочным, если он преждевременно встретит пустую ячейку.Чтобы избежать этого, используйте:

Sub dural()
    Dim i As Long, N As Long
    N = Cells(Rows.Count, "B").End(xlUp).Row
    For i = 2 To N
        v = Cells(i, 2).Value
        If v <> "" Then
            arr = Split(v, "-")
            Cells(i, 3).Resize(1, UBound(arr) + 1) = arr
        End If
    Next i
End Sub
0 голосов
/ 08 февраля 2019

Вот простой саб для работы с текущей активной ячейкой.

Sub splitCell()
Dim cellSplit As Variant
Dim nextColumn As Long

nextColumn = 1
cellSplit = Split(ActiveCell.Value2, "-")
For Each Item In cellSplit
    ActiveCell.Offset(0, nextColumn).Value2 = Item
    nextColumn = nextColumn + 1
Next

End Sub
0 голосов
/ 08 февраля 2019

Как указано здесь , вы можете использовать Text to Columns:

Выберите ячейку или столбец, содержащий текст, который вы хотите разделить.

ВыбратьДанные> Текст в столбцы.

В мастере преобразования текста в столбцы выберите «Разграничить»> «Далее».

Выберите разделители для своих данных.Вы хотите поместить - в область «Прочее».

Выбрать Далее.

Выберите формат данных Столбца или используйте то, что Excel выбрал для вас.

Выберите место назначения, где вы хотите, чтобы разделенные данные отображались на вашем рабочем листе.

Выберите Готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...