如何使用VBA将多值单元格分成多行?

时间:2019-04-28 15:59:37

标签: excel vba

我需要将单元格拆分为多行,而无需移动ID列中的单元格。问题在于该列表可以无穷无尽,类别的数量可以不同,并且它们可以是C列中的信息,这些信息也必须与ID单元格保持在同一行。

当前结果和想要的结果

https://imgur.com/a/rslXx4A

1 个答案:

答案 0 :(得分:0)

您可以使用宏循环浏览您的信息,并将其打印在新列中。像这样:

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”列中打印出ID号。

如果您还希望像我们在进行“ 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