根据分隔符剪切字符串

时间:2017-03-08 21:26:18

标签: excel vba excel-vba

我正在尝试使用for循环来遍历几千行所有具有这种风格的数据:1010-2020-3030

我想使用连字符作为分隔符将此字符串拆分为3个单元格。我想将1010放入AI细胞,将2020放入AJ细胞,将3030放入AK细胞。

我已经搜遍了谷歌,并结合了一些我发现的例子,但是我收到了一个对象错误1004.这是我到目前为止的代码:

Sub Cell_Loop()
Dim cell As Range

  For Each cell In ActiveSheet.Range("I2:I3000")
    Selection.TextToColumns _
          Destination:=Range("AI" & cell), _           '(I'm trying to use cell as a variable to iterate through.)
          DataType:=xlDelimited, _
          TextQualifier:=xlDoubleQuote, _
          ConsecutiveDelimiter:=False, _
          Tab:=True, _
          Semicolon:=False, _
          Comma:=False, _
          Space:=False, _
          Other:=True, _
          OtherChar:="-"
  Next cell

End Sub

谁能看到我出错的地方?

1 个答案:

答案 0 :(得分:1)

TextToColumns可以处理第I列中的所有近3000个条目,并将它们吐出到AI:AK列。

Sub Split_Without_Loop()

  With ActiveSheet
    .Range(.Cells(2, "I"), .Cells(.Rows.Count, "I").End(xlUp)).TextToColumns _
          Destination:=Range("AI2"), _
          DataType:=xlDelimited, _
          Tab:=False, _
          Semicolon:=False, _
          Comma:=False, _
          Space:=False, _
          Other:=True, _
          OtherChar:="-"
  End With

End Sub

为了清晰起见,可以删除一些录制的代码,因为它与此操作无关。

您最初的问题是您将单元格循环到表示每个单元格的范围变量中,然后使用Selection来控制TextToColumns命令。没有选择任何内容或当前所选单元格不包含连字符,并且无论如何,您没有将选择更改为循环中迭代的单元格。它可能适用于cell.TextToColumns _而不是Selection.TextToColumns _,但循环会大大减慢它的速度。

enter image description here