在vba中用破折号分隔字符

在vba中用破折号分隔字符,vba,excel,split,Vba,Excel,Split,我试图在VBA中用(-)破折号分隔字符,然后将其粘贴到B列。所以在A列中我有TOM-JAY-MOE-XRAY。现在,如果我想将其拆分并粘贴到4个不同的列中,比如列B=TOM,列C=JAY,等等。这里是我的代码和图像,以便更好地理解 Sub x() Dim sheet As Worksheet Set sheet = ActiveWorkbook.Worksheets("Sheet1") For x = 1 To sheet.Range("A" & sheet.Ro

我试图在VBA中用(-)破折号分隔字符,然后将其粘贴到B列。所以在A列中我有TOM-JAY-MOE-XRAY。现在,如果我想将其拆分并粘贴到4个不同的列中,比如列B=TOM,列C=JAY,等等。这里是我的代码和图像,以便更好地理解

Sub x()
    Dim sheet As Worksheet
    Set sheet = ActiveWorkbook.Worksheets("Sheet1")
    For x = 1 To sheet.Range("A" & sheet.Rows.Count).End(xlUp).Row
        sheet.Range("A", "B", "C", "D" & x) = InStr(1, sheet.Cells(x, 1), "-")
    Next x
End Sub


您可以使用VBA
split
功能拆分分隔文本。以下是一个基本示例:

Sub test()

    Dim MyArray() As String

    ' use the VBA split function to split the string into array of strings
    ' the second function parameter identifies the delimiter
    MyArray() = Split("TOM-JAY-MOE-XRAY", "-")

    ' here I iterated the array and printed to the debug window.
    For i = LBound(MyArray) To UBound(MyArray)
        Debug.Print "Word " & i & "=" & MyArray(i)
    Next i

End Sub

您可以这样做:

With Sheets("SheetName")
    Dim lr As Long
    lr = .Range("A" & .Rows.Count).End(xlUp).Row
    .Range("A1:A" & lr).TextToColumns Destination:=.Range("B1") _
        , DataType:=xlDelimited, Other:=True, OtherChar:="-"
End With
Excel中有一个内置功能,用于分隔分隔的文本,
TextToColumns

我们需要的是使用它来分隔字符串,特别是当您只有一个分隔符时

实际上,如果希望计算列A中的所有数据,则不需要检查最后一行的值。因此,下面的工作将很好

With Sheets("SheetName")
    .Range("A:A").TextToColumns Destination:=.Range("B1") _
        , DataType:=xlDelimited, Other:=True, OtherChar:="-"
End With
这将一次性完成(即使是从调试窗口),并且不限于4列(这是您在文章中要求的),而是根据需要占用多少列—将拆分字符串

Range("B9").Resize(1,ubound(Split(Range("A9").Text,"-"))+1) = Split(Range("A9").Text,"-")
我的测试数据在第9行A列中,如果需要,可以很容易地将其放入循环中

注意:这是作为其他答案的替代方案提供的,我并不是说这是唯一或最好的方法,如果你要做多行,最好使用@L42发布的Excels内置文本到列功能