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

时间:2014-01-08 08:32:24

标签: excel excel-vba excel-2007 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

1 个答案:

答案 0 :(得分: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

还有其他几种方法可以提高此代码的效率。例如,在执行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