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)
像这样的东西:
获取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)