VBA Split String Loop

时间:2014-07-28 05:42:48

标签: string vba excel-vba split excel

我正在尝试拆分字符串并创建一个循环来遍历列中的单元格。有一些挑战:

  1. 拆分仅适用于ActiveCell

  2. 循环遍历所有单元格,直到LastRow,但填充所有单元格 仅使用ActiveCell的分割字符串值。

  3. 即使有i = 0,数组拆分也会以Option Base 1开头 在模块的开头。

  4. 如何更改目的地的位置(例如,而不是 在现有数据旁边拆分字符串,是否有管理选项 列号)?

  5. 谢谢

    Option Explicit
    Option Base 1
    
    Sub SplitStringLoop()
    
        Dim txt As String
        Dim i As Integer
        Dim y As Integer
        Dim FullName As Variant
        Dim LastRow As Single
    
        ReDim FullName(3)
    
        LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
        txt = ActiveCell.Value
    
        FullName = Split(txt, "-")
    
        For y = 2 To LastRow
    
                For i = 1 To UBound(FullName)
    
                    Cells(y, i + 1).Value = FullName(i)
    
                Next i
    
       Next y
    
    End Sub
    

2 个答案:

答案 0 :(得分:4)

Chris Nelisen概述了原因,我在发布之前编写了这段代码,所以无论如何我都会发布。

Option Explicit

Sub SplitStringLoop()

Dim txt As String
Dim i As Integer
Dim y As Integer
Dim FullName As Variant
Dim LastRow As Single

ReDim FullName(3)

LastRow = Cells(Rows.Count, "A").End(xlUp).Row

For y = 2 To LastRow
        Cells(y, 1).Select
        txt = ActiveCell.Value
        FullName = Split(txt, "-")
        For i = 0 To UBound(FullName)
           Cells(y, i + 2).Value = FullName(i)
        Next i
Next
End Sub

答案 1 :(得分:0)

解决您列出的问题

  1. Split对您传递给它的字符串起作用。 正在将活动单元格值传递给它。
  2. 您不会在循环内更新split(FullName)的结果。那你还期待什么?
  3. Split 返回从零开始的一维数组。它在帮助中就是这么说的。 Option Base 1指定默认下限,因为您未在Dim语句中指定它。
  4. 您在代码Cells(y, i + 1)中指定了列(在本例中为i + 1)。如果您想在其他地方使用它,请指定其他列。