Как разбить многозначные ячейки на несколько строк с помощью VBA? - PullRequest
0 голосов
/ 28 апреля 2019

Мне нужно разбить ячейки на несколько строк, не перемещая ячейки в столбце ID. Проблема в том, что список может быть бесконечным, а количество категорий может быть разным, и, кроме того, они могут содержать информацию в столбце C, которая также должна оставаться в той же строке, что и ячейка идентификатора.

Текущие и требуемые результаты

https://imgur.com/a/rslXx4A

1 Ответ

0 голосов
/ 28 апреля 2019

Вы можете использовать макрос для циклического просмотра вашей информации и печати в новых столбцах.Что-то вроде:

Sub delimit()
Dim cat As Range, c As Range, i As Long, nxt As Long
Set cat = ActiveSheet.Range(Range("B2"), Range("B65000").End(xlUp))
For Each c In cat
    arr = Split(c.Value, ";")
    For i = 0 To UBound(arr)
        nxt = Cells(Rows.Count, 5).End(xlUp).Offset(1, 0).Row
        If i = 0 Then Range("D" & nxt).Value = c.Offset(0, -1)
        Range("E" & nxt).Value = arr(i)
    Next i
Next c
End Sub

enter image description here

Основное, что мы здесь используем, это Split(), который превратит строку в массив.
Синтаксис: Split ( expression [,delimiter] [,limit] [,compare] )

Мы перебираем список категорий, устанавливаем столбец "B" и создаем новый массив для каждой ячейки.
Затем мы печатаем этот массив в нужном столбце,в этом примере столбец "E".
Но сначала мы распечатаем идентификационный номер в столбце "D", поскольку в настоящее время мы нацеливаемся на эту строку.

Если вы также хотитескопируйте столбец "C", как мы делаем "A", просто измените IF соответственно.

С

If i = 0 Then Range("D" & nxt).Value = c.Offset(0, -1)

на

If i = 0 Then
    Range("D" & nxt).Value = c.Offset(0, -1)
    Range("F" & nxt).Value = c.Offset(0, 1)
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...