Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 分割字符串循环_String_Vba_Excel_Split - Fatal编程技术网

String 分割字符串循环

String 分割字符串循环,string,vba,excel,split,String,Vba,Excel,Split,我正在尝试拆分一个字符串并创建一个循环以遍历列中的单元格。有几个挑战: 拆分仅适用于ActiveCell 循环遍历所有单元格,直到最后一行,但填充所有单元格 仅使用ActiveCell中的拆分字符串值 数组的拆分从i=0开始,即使有选项Base 1 在模块的开头 如何更改目的地的位置(例如,代替 拆分现有数据旁边的字符串,是否有管理选项 列号) 多谢各位 Option Explicit Option Base 1 Sub SplitStringLoop() Dim txt As St

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

  • 拆分仅适用于
    ActiveCell

  • 循环遍历所有单元格,直到最后一行,但填充所有单元格 仅使用
    ActiveCell
    中的拆分字符串值

  • 数组的拆分从
    i=0开始,即使有
    选项Base 1
    在模块的开头

  • 如何更改目的地的位置(例如,代替 拆分现有数据旁边的字符串,是否有管理选项 列号)

  • 多谢各位

    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
    

    解决您列出的问题

  • Split
    作用于传递给它的字符串。您正在将活动单元格值传递给它
  • 您不会在循环内更新拆分(
    FullName
    )的结果。那么你还期待什么呢
  • Split
    返回一个基于零的一维数组。就在《帮助》里写着
    Option Base 1
    指定默认下限,适用于在
    Dim
    语句中未指定的情况
  • 您正在代码
    单元格(y,i+1)
    中指定列(本例中为
    i+1
    )。如果要在其他位置使用,请指定其他列

  • 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
    

    谢谢你,克里斯,你明确的评论。我是VBA新手,我真的很欣赏不仅仅是一个代码,而是一个详细的解释。无论如何,我仍然在努力进行适当的更改。1.当我用Range(txt=Range(Cells(2,1),Cells(LastRow,1)).Value)替换ActiveCell时,它会给我一个类型不匹配错误。这可能是因为文本作为字符串。如果我将Dim txt更改为范围,我会出现一个错误“对象变量或块变量未设置。我认为字符串是正确的数据类型,因为我必须拆分文本而不是范围。请帮助我。嗨,克里斯,谢谢你调整代码和详细解释!!!案例已结束。祝你度过愉快的一天!!!