Excel 将单元格中的多个条目转换为多行

Excel 将单元格中的多个条目转换为多行,excel,excel-formula,vba,Excel,Excel Formula,Vba,我有一个excel文件,上面有乐队的名字和流派 A列:带名称。B栏:体裁 b列可能包含多个条目,如pop/rock。我想把它分成两行 例如: [1] 令人敬畏的乐队|流行/摇滚 将转变为 [1] 令人敬畏的乐队|流行音乐 [2] 摇滚乐队 我如何在excel中认识到这一点?有什么线索吗?提前感谢。突出显示B列并运行此VBA应该可以做到: Sub bandsplit() Dim c As Range Dim splitv() As String For Each c In Selection

我有一个excel文件,上面有乐队的名字和流派

A列:带名称。B栏:体裁

b列可能包含多个条目,如pop/rock。我想把它分成两行

例如:

[1] 令人敬畏的乐队|流行/摇滚 将转变为

[1] 令人敬畏的乐队|流行音乐 [2] 摇滚乐队
我如何在excel中认识到这一点?有什么线索吗?提前感谢。

突出显示B列并运行此VBA应该可以做到:

Sub bandsplit()
Dim c As Range
Dim splitv() As String

For Each c In Selection
    splitv = Split(c.Value, "/")
    If UBound(splitv) > 0 Then
        c.EntireRow.Insert
        c.Offset(-1, 0).Value = splitv(1)
        c.Offset(-1, -1).Value = c.Offset(0, -1).Value
        c.Value = splitv(0)
    End If
Next c
End Sub

它被限制为2种类型,但您可以修改它以添加更多类型。

突出显示B列并运行此VBA应该可以做到:

Sub bandsplit()
Dim c As Range
Dim splitv() As String

For Each c In Selection
    splitv = Split(c.Value, "/")
    If UBound(splitv) > 0 Then
        c.EntireRow.Insert
        c.Offset(-1, 0).Value = splitv(1)
        c.Offset(-1, -1).Value = c.Offset(0, -1).Value
        c.Value = splitv(0)
    End If
Next c
End Sub
它被限制为两种类型,但你可以修改它来增加更多。

我假设一个令人敬畏的乐队流行乐存放在A1位置 对于Awesomeband | Pop=LEFTA1,15 对于Awesomeband | Rock==左1,12和右1,4 我想这应该行得通。

我假设一个乐队的流行乐存放在A1地点 对于Awesomeband | Pop=LEFTA1,15 对于Awesomeband | Rock==左1,12和右1,4
我认为这应该行得通。

尝试过写一些类似于@John Dirk Morrison的东西,允许两种以上的体裁。但不适用于所选内容,只适用于表1中的A列和B列

Sub BandSplit()
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("Sheet1")
Dim Genre() As String
Dim Count As Integer
Dim Index As Integer
Dim First As Boolean
Dim Row As Integer: Row = 2 ' Exclude Header Row

Do
    Genre = Split(Sheet.Cells(Row, 2), "/")
    Count = UBound(Genre)
    First = True
    If Count > 0 Then
        Index = 0
        Do
            If First = True Then
                Sheet.Cells(Row, 2).Value2 = Genre(Index)
                First = False
            Else
                Sheet.Rows(Row).EntireRow.Insert (xlShiftDown)
                Sheet.Cells(Row, 1).Value2 = Sheet.Cells(Row + 1, 1).Value2
                Sheet.Cells(Row, 2).Value2 = Genre(Index)
            End If
            Index = Index + 1
            If Index > Count Then
                Exit Do
            End If
        Loop
    End If
    Row = Row + 1
    If Sheet.Cells(Row, 1).Value2 = "" Then
        Exit Do
    End If
Loop
End Sub

曾尝试写过类似于@John Dirk Morrison的东西,允许两种以上的体裁。但不适用于所选内容,只适用于表1中的A列和B列

Sub BandSplit()
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("Sheet1")
Dim Genre() As String
Dim Count As Integer
Dim Index As Integer
Dim First As Boolean
Dim Row As Integer: Row = 2 ' Exclude Header Row

Do
    Genre = Split(Sheet.Cells(Row, 2), "/")
    Count = UBound(Genre)
    First = True
    If Count > 0 Then
        Index = 0
        Do
            If First = True Then
                Sheet.Cells(Row, 2).Value2 = Genre(Index)
                First = False
            Else
                Sheet.Rows(Row).EntireRow.Insert (xlShiftDown)
                Sheet.Cells(Row, 1).Value2 = Sheet.Cells(Row + 1, 1).Value2
                Sheet.Cells(Row, 2).Value2 = Genre(Index)
            End If
            Index = Index + 1
            If Index > Count Then
                Exit Do
            End If
        Loop
    End If
    Row = Row + 1
    If Sheet.Cells(Row, 1).Value2 = "" Then
        Exit Do
    End If
Loop
End Sub

为了@Navneet的尝试,拆分为C1:D2放入=A$1并复制到A2。在D1中:

=LEFT(B1,FIND("/",B1)-1)  
在D2中:

=MID(B1,FIND("/",B1)+1,LEN(B1))

为了@Navneet的尝试,拆分为C1:D2放入=A$1并复制到A2。在D1中:

=LEFT(B1,FIND("/",B1)-1)  
在D2中:

=MID(B1,FIND("/",B1)+1,LEN(B1))

嘿,非常感谢你的努力。我以前没有做过VBA。我得到以下错误预期结束子-我如何修复它,使代码顺利运行当我写代码时,代码对我有效,你能检查一下你是否完全复制了代码吗?听起来你错过了最后一行结束subHey,非常感谢你的努力。我以前没有做过VBA。我得到以下错误预期结束子-我如何修复它,使代码顺利运行当我写代码时,代码对我有效,你能检查一下你是否完全复制了代码吗?听起来你好像错过了最后一行