Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何分离列中的所有字符串并将每个子字符串粘贴到其他列中?(VBA提供)_Vba_Excel - Fatal编程技术网

如何分离列中的所有字符串并将每个子字符串粘贴到其他列中?(VBA提供)

如何分离列中的所有字符串并将每个子字符串粘贴到其他列中?(VBA提供),vba,excel,Vba,Excel,现在我在A列中有如下字符串: aa-bb-cc-123 aa-bb-cc-345 aa-bb-cc-789 etc... 如何在VBA中以“-”分隔字符串,并将每个子字符串粘贴到不同的列中?例如: column W column X column Y column Z aa bb cc 123 aa bb cc 456 aa bb

现在我在A列中有如下字符串:

aa-bb-cc-123

aa-bb-cc-345

aa-bb-cc-789

etc...
如何在VBA中以“-”分隔字符串,并将每个子字符串粘贴到不同的列中?例如:

column W    column X    column Y    column Z

aa          bb          cc          123

aa          bb          cc          456

aa          bb          cc          789

任何帮助都将不胜感激

开始录制宏。准备就绪后,通过“数据”菜单,选择“文本到列”。按照向导进行到底。停止录音。检查宏代码并根据需要进行修改。

开始录制宏。准备就绪后,通过“数据”菜单,选择“文本到列”。按照向导进行到底。停止录音。签出宏代码并根据需要进行修改。

您可以尝试以下代码:

Sub split_AtoW()

Dim x As Long, mydata
For x = 1 To Range("A65526").End(xlUp).Row 'x = first row here, so change to 2 if header row exists
    mydata = split(Range("A" & x), "-") 'put data in column A into an array split by "-"
    Range("W" & x).Resize(1, UBound(mydata) + 1).Value = mydata 'put data in the split array into W onwards
Next x

End Sub

您可以尝试以下代码:

Sub split_AtoW()

Dim x As Long, mydata
For x = 1 To Range("A65526").End(xlUp).Row 'x = first row here, so change to 2 if header row exists
    mydata = split(Range("A" & x), "-") 'put data in column A into an array split by "-"
    Range("W" & x).Resize(1, UBound(mydata) + 1).Value = mydata 'put data in the split array into W onwards
Next x

End Sub

选择要处理并运行此小宏的单元格:

Sub Splitter()
    Dim r As Range
    For Each r In Selection
        ary = Split(r.Value, "-")
        For i = LBound(ary) To UBound(ary)
            r.Offset(0, i + 1).Value = ary(i)
        Next i
    Next r
End Sub

选择要处理并运行此小宏的单元格:

Sub Splitter()
    Dim r As Range
    For Each r In Selection
        ary = Split(r.Value, "-")
        For i = LBound(ary) To UBound(ary)
            r.Offset(0, i + 1).Value = ary(i)
        Next i
    Next r
End Sub

对于这样一个简单的任务,您需要使用VBA吗?如果否,则使用文本到列;)编辑:我看到@Tarik已经建议:)我同意在大多数情况下,文本到列将是一种方式,但它不会填充正确的列(W到V),并且会覆盖B到D并破坏A列的内容。对于这样一个简单的任务,您需要使用VBA吗?如果否,则使用文本到列;)编辑:我看到@Tarik已经建议:)我同意在大多数情况下,文本到列将是一种方式,但它不会填充正确的列(W到V),并且会覆盖B到D,并破坏A列的内容。+1建议文本到列。我仍然觉得,对于这样一项简单的任务,不需要VBa1关于向列建议文本。我仍然觉得,对于这样一项简单的任务,不需要VBa那相当紧凑+1那相当紧凑+1根据问题的要求,这需要一个小mod将W填充到Z,如果选择了多个列,则可能会在一个列上消失。根据问题的要求,这需要一个小mod将W填充到Z,如果选择了多个列,则可能会在一个列上消失。