Excel 如何拆分文本并循环到下一行
我正在使用split函数使用空格分割文本。我已经让我的宏分割文本,但我有困难让循环移动到下面的下一行分割Excel 如何拆分文本并循环到下一行,excel,vba,loops,split,Excel,Vba,Loops,Split,我正在使用split函数使用空格分割文本。我已经让我的宏分割文本,但我有困难让循环移动到下面的下一行分割 Sub Split_Text_Test1() Dim Txt As String Dim i As Integer Dim FullName As Variant Range("A1").Select Txt = ActiveCell.Value FullName = Split(Txt, " ") For i = 0 To UBound(FullName) Cells(1
Sub Split_Text_Test1()
Dim Txt As String
Dim i As Integer
Dim FullName As Variant
Range("A1").Select
Txt = ActiveCell.Value
FullName = Split(Txt, " ")
For i = 0 To UBound(FullName)
Cells(1, i + 1).Value = FullName(i)
Next i
End Sub
当您从A1开始时,可能需要更改循环中的位。这假设您想要A2和down中的条目。通常不建议使用选择/激活,不太可靠 编辑以跨列移动,而不是向下移动行
For i = 0 To UBound(FullName)
Range("A1").Offset(,i + 1).Value = FullName(i)
Next i
也就是说,您可以完全避免循环并使用
Range("B1").Resize(, UBound(FullName) + 1).Value = FullName
在本例中,我将使用一个循环(您的解决方案离此不远):
我在你的代码中添加了一些东西,看看这是否符合你的目的。然而,正如SJR所说,“数据”菜单中的“文本到列”选项将以较少的工作量完成相同的工作
Sub Split_Text_Test1()
Dim Txt As String
Dim i As Integer
Dim FullName As Variant
Dim lastRow As Long
Dim myRange As Range
With ActiveSheet.UsedRange
lastRow = .Rows(.Rows.Count).Row
End With
Debug.Print lastRow
'Range("A1").Select
Set myRange = ActiveSheet.Range("A1", "A" & lastRow)
For Each cell In myRange
Txt = cell.Value
FullName = Split(Txt, " ")
For i = 0 To UBound(FullName)
Cells(cell.Row, i + 1).Value = FullName(i)
Next i
Next cell
End Sub
嗨,威廉,谢谢你回答我的问题。当我运行此命令时,它会将我的文本拆分为不同的行。理想情况下,我希望将A列文本拆分为A、B和C列,然后宏转到下一行执行相同的操作。此外,我正在拆分的文本看起来都类似于“14912E33 190205 099.7920”。它的末尾有55个空格,我想这也会让我的代码失去意义。我有一个宏,它从一个.TXT文件复制这个文本,这就是为什么它看起来很傻。嗨,SJR,谢谢你回答我的问题。当我运行此命令时,它会将我的文本拆分为不同的行。理想情况下,我希望将A列文本拆分为A、B和C列,然后宏转到下一行执行相同的操作。只需在偏移量(上面修改)前面加一个逗号,以偏移列而不是行。然而,为什么不使用文本到列,效率更高呢?SJR您能解释一下文本到列是什么意思吗?你是说列中的公式吗?不,它是数据菜单中的一个选项。单击几下,您就完成了更多的后台工作—我创建了代码,打开一个文本文件,从该文本文件复制数据,并在每次运行时将其粘贴到工作簿中的单元格A1中。我刚刚使用了Text-to-Columns函数,它可以正常工作,但当我运行宏以提取新数据时,Text-to-Columns会清除。请注意,行计算变量的类型应始终为
Long
,因为Excel的行数超过Integer
所能处理的Dim R
。我建议使用VBA,因为Integer
没有任何好处MaxR
已声明但从未使用。
Dim Txt As String
Dim i As Integer
Dim FullName As Variant
Dim R As Integer, C As Integer, MaxR as Integer
C = 1 ' can be another loop as well
For R = 1 to 1000
Txt = Trim(Cells(r,1).Value) ' will remove space from start and end
FullName = Split(Txt, " ")
For i = 0 To UBound(FullName)
Cells(R , C + 1 + i ).Value = FullName(i)
Next i
Next R
Sub Split_Text_Test1()
Dim Txt As String
Dim i As Integer
Dim FullName As Variant
Dim lastRow As Long
Dim myRange As Range
With ActiveSheet.UsedRange
lastRow = .Rows(.Rows.Count).Row
End With
Debug.Print lastRow
'Range("A1").Select
Set myRange = ActiveSheet.Range("A1", "A" & lastRow)
For Each cell In myRange
Txt = cell.Value
FullName = Split(Txt, " ")
For i = 0 To UBound(FullName)
Cells(cell.Row, i + 1).Value = FullName(i)
Next i
Next cell
End Sub