Excel 只要单元格中有内容,就可以使用字符串拆分器
我有这个代码来分割字符串。当前,如果计数器等于存在数据的行数,它将正常运行。但是,行数是可变的。如何使for循环在有数据的情况下运行Excel 只要单元格中有内容,就可以使用字符串拆分器,excel,excel-2007,vba,Excel,Excel 2007,Vba,我有这个代码来分割字符串。当前,如果计数器等于存在数据的行数,它将正常运行。但是,行数是可变的。如何使for循环在有数据的情况下运行 Sub SplitToColumns() Range("A1").Select For Counter = 0 To 100 Step 1 Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _ TextQuali
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中最后填充的行的行号。(替换为您选择的列)。然后在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操作之前,不需要选择单元格。事实上,您可以在一系列单元格上执行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
+我更喜欢第二套代码。(没有
.Activate
):)也不赞成使用。在循环中选择。事实上不赞成使用。请选择。)另外,
循环的中的步骤1
不是必需的…谢谢,Sid。重新激活:如果在工作表模块中使用,TextToColumns的结果将放在活动单元格所在的任何位置(至少Excel 2013在我的测试中是这样做的)。因此激活A1。请在不使用的情况下尝试,并在运行之前选择另一个单元格。如果为True,则需要在目的地:=
:)中指定确切的目的地。我对您的代码做了一个小更改。如果你不高兴,请随时回滚更改。现在,无论哪个工作表处于活动状态,它都将只将结果输出到正确的工作表。:)“那很好,”悉达多说。我通常只在工作表模块中运行简单的东西,因为它的准备工作更少。晚上9点以后我就懒了。。。。。。