字符串拆分器,只要单元格中有东西

use*_*920 4 excel vba excel-2007 excel-vba

我有这个代码来分割字符串.目前,如果计数器等于存在数据的行数,它将正常运行.但是,这个行数是可变的.如果存在数据,如何使for循环运行?

Sub SplitToColumns()

    Range("A1").Select
    For Counter = 0 To 100 Step 1

        Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
            Tab:=False, Semicolon:=False, Comma:=True, Space:=False, _
            Other:=False, _
            FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
        ActiveCell.Offset(1, 0).Select
    Next Counter
End Sub
Run Code Online (Sandbox Code Playgroud)

tey*_*lyn 5

像这样的东西:

获取A列中最后一个填充行的行号.(替换为您选择的列).然后在for循环中使用该行号,但从1开始,而不是从0开始.如果不再需要,请删除debug.print.

Sub SplitToColumns()
Dim rowCount As Long
rowCount = Cells(rows.Count, "A").End(xlUp).Row
Debug.Print rowCount

    Range("A1").Select
    For Counter = 1 To rowCount Step 1

        Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
            Tab:=False, Semicolon:=False, Comma:=True, Space:=False, _
            Other:=False, _
            FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
        ActiveCell.Offset(1, 0).Select
    Next Counter
End Sub
Run Code Online (Sandbox Code Playgroud)

还有其他几种方法可以使此代码更有效.例如,在执行TextToColumns之前,不需要选择单元格.实际上,您可以在一系列单元格上执行TextToColumns,您无需遍历该范围内的所有单元格.

使用上面的技术获取最后一行的行号,然后构建一个从A1开始并延伸到A列的范围,最后一行填充的行号.

然后在整个范围内执行TextToColumns,一次性完成.比循环更快,更快!

Sub SplitToColumns()
    Dim rowCount As Long
    Dim ws As Worksheet

    '~~> Change this to the relevant sheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        rowCount = .Cells(.Rows.Count, "A").End(xlUp).Row

        .Range("A1:A" & rowCount).TextToColumns _
            Destination:=.Range("A1"), _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=False, _
            Tab:=False, _
            Semicolon:=False, _
            Comma:=True, _
            Space:=False, _
            Other:=False, _
            FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)