Excel 如何拆分文本并循环到下一行

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

我正在使用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, 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