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

时间:2014-12-19 11:06:59

标签: excel excel-vba excel-formula vba

我有一个带有乐队名称及其类型的excel文件。

A栏:带名。 B栏:流派。

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

示例:

  • [1] Awesomeband |流行/摇滚

将转换为

  • [1] Awesomeband |弹出
  • [2] Awesomeband |岩石

我如何在excel中意识到这一点?有线索吗?提前谢谢。

4 个答案:

答案 0 :(得分:3)

突出显示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种类型,但您可以通过破解它来添加更多类型。

答案 1 :(得分:3)

如果想要写一些像@John Dirk Morrison这样的东西,允许两种以上的类型。但不适用于选择,只有Sheet1上的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

答案 2 :(得分:1)

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

=LEFT(B1,FIND("/",B1)-1)  

并在D2中:

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

答案 3 :(得分:-1)

我假设 Awesomeband | Pop | Rock 存储在A1处 对于 Awesomeband | Pop =LEFT(A1,15)
对于 Awesomeband | Rock = =LEFT(A1,12)&""&(RIGHT(A1,4))
我认为这应该有用。

相关问题