Excel 将单元格中的多个条目转换为多行
我有一个excel文件,上面有乐队的名字和流派 A列:带名称。B栏:体裁 b列可能包含多个条目,如pop/rock。我想把它分成两行 例如: [1] 令人敬畏的乐队|流行/摇滚 将转变为 [1] 令人敬畏的乐队|流行音乐 [2] 摇滚乐队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中认识到这一点?有什么线索吗?提前感谢。突出显示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。我得到以下错误预期结束子-我如何修复它,使代码顺利运行当我写代码时,代码对我有效,你能检查一下你是否完全复制了代码吗?听起来你好像错过了最后一行