Excel VBA / Macro - 多列的TextToColumns?

时间:2013-06-11 18:59:57

标签: excel vba

有没有办法找到包含“Date”的单元格并运行TextToColumns宏? 而不是引用列“H”或“J”和/或等等......

最终我试图将包含“〜Date”的约5列更改为TextToColumn。 它并不总是在“H”栏上。

非常感谢您的专业知识

Columns("H:H").Select
    Selection.TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 5), TrailingMinusNumbers:=True

1 个答案:

答案 0 :(得分:1)

假设" date"值可以在第1行的列标题中找到,以下代码应该可以解决问题。

它的工作原理如下:

  • 在第1行找到最右边的列标题

  • 循环显示第一个到最后一个标题

  • 搜索字符串" date"在每个标题单元格内

    - 如果未找到,请转到下一个标题单元格

    - 如果找到,则将该标题的日期列的文本值转换为列,然后转到下一个标题单元格

请注意,我从代码中删除了Selects,这不是转换所必需的。

您的描述并不清楚" date" -headed列右侧是否有足够的空白列来保存拆分数据而不会覆盖其他现有数据。 此过程假设有足够的空间。因此,如果右侧单元格中有数据,Excel将显示一个对话框,询问您是否要覆盖相邻的单元格。如果没有,并且需要插入其他列,请修改您的问题以明确说明。

  Sub txttocol()

      Dim ws As Sheet1
      Dim rng As Range
      Dim lastCol As Long
      Dim i As Long

      Set ws = Worksheets("Sheet1")
      With ws
          lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
          For i = 1 To lastCol
              If InStr(UCase(.Cells(1, i).Value), UCase("date")) <> 0 Then
                  Set rng = .Range(Columns(i), Columns(i))
                  rng.TextToColumns Destination:=rng, DataType:=xlDelimited, _
                      TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
                      Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
                      :=Array(1, 5), TrailingMinusNumbers:=True
              End If
          Next i
      End With
  End Sub