Excel VBA /macros – TextToColumns多列?

有没有办法find包含“date”的单元格并运行TextToColumnsmacros? 而不是引用列“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的列标题中find“date”值,下面的代码应该做的伎俩。

它的工作原理如下:

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

  • 循环通过第一个到最后一个标题

  • 在每个标题单元格内searchstring“date”

    – 如果找不到,请转到下一个标题单元格

    – 如果find,则将该标题的date列的文本值转换为列,然后转到下一个标题单元格

请注意,我从代码中删除了Selects ,而不需要进行转换。

您的描述不清楚是否有足够的空白列在“date” – 目录列的右侧来保存分割的数据,而不覆盖其他现有的数据。 这个过程假定有足够的空间。 因此,如果右侧单元格中有数据,则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