string拆分器,只要在单元格中有东西

我有这个代码拆分string。 目前如果计数器等于存在数据的行数,它将正常运行。 但是,这个行数是可变的。 只要有数据,如何让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 

像这样的东西:

获取列A中最后一个已填充行的行号(用您select的列replace)。 然后在for循环中使用该行号,但是从1开始,而不是从零开始。 如果不再需要,删除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之前,不需要select单元格。 实际上,您可以在一系列单元格上执行TextToColumns,而无需遍历范围内的所有单元格。

使用上面的技巧获取最后一行的行号,然后build立一个范围从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