Как скопировать строку и вставить ее в новую строку ниже, если ячейка содержит «,», и удалить то, что после «,» в исходной ячейке - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь скопировать строку и вставить в новую строку непосредственно ниже, если ячейка в столбце D содержит ",". Я хочу сделать еще кое-что, но проще показать пример с тем, что я хочу, до и после.

До

Jon     Junior   Male   A, X    
Pete    Freshman Male   A, X    
Tyler   Senior   Male   A, X, C    
Dave    Senior   Male   A, C, P, U

После

Jon     Junior   Male   A    
Jon     Junior   Male   X    
Pete    Freshman Male   A    
Pete    Freshman Male   X    
Tyler   Senior   Male   A    
Tyler   Senior   Male   X    
Tyler   Senior   Male   C    
Dave    Senior   Male   A    
Dave    Senior   Male   C    
Dave    Senior   Male   P    
Dave    Senior   Male   U

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

Dim GCell As Range
Dim N As Long, i As Long
N = ws.Cells(Rows.Count, "D").End(xlUp).Row
For Each GCell In Range("D2:D")
    If GCell.Value Like "*,*" Then
    GCell.Offset(1, 0).EntireRow.Insert
    ws.Cells(i, "D").EntireRow.Copy ws.Cells(i + 1, 1)
    Else

    End If
    i = i + 1
    Next GCell

1 Ответ

0 голосов
/ 22 октября 2019

Вы можете сделать это таким образом, настроить имена листов в соответствии с требованиями (я поместил результаты на другой лист):

Sub x()

Dim r As Range, v As Variant

For Each r In Sheets("Sheet1").Range("A1").CurrentRegion.Columns(1).Cells
    v = Split(r.Offset(, 3), ",")
    r.Resize(, 3).Copy Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp)(2).Resize(UBound(v) + 1)
    Sheets("Sheet2").Range("D" & Rows.Count).End(xlUp)(2).Resize(UBound(v) + 1).Value = Application.Transpose(v)
Next r

End Sub

Split преобразует его в массив, используя запятую в качестве разделителя;транспонируя его, вы превращаете его в «вертикальный» массив, который можно вставить в выходной лист.

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