在多个列上使用“文本到列”宏

时间:2019-10-15 13:56:16

标签: excel vba

enter image description here

此图像以UK格式显示列的初始状态。 #value(如果我尝试向其添加1),False(如果我对它运行ISNUMBER())和True(如果我在输入项上使用文本作为列来交换句点和逗号)。一旦处于真实状态,我就可以使用数字,但是对于某些情况,则无法达到此真实状态。相反,它们导致错误处理转换为弹出的数字菱形。

我使用记录器将文本记录到单列的过程。它会产生以下内容:

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

我大约有60列必须应用,而我目前的解决方案是在此代码块中有60个条目具有不同的单元格引用,最终运行非常缓慢。

  • 是否可以将其应用于多个列?
  • 是否可以删除一些代码以使其运行更快?

搜索时找不到答案。

1 个答案:

答案 0 :(得分:0)

尽管使用selection并不理想,但是有一些方法可以利用Selection支持更有效地将列循环到.texttocolumns

请注意,我在texttocolumns中没有任何其他参数,根据您的使用情况,这可能对您或不成问题。

Private Sub TTC()
    If Selection.Count = 1 Then
        Selection.TextToColumns
    Else
        Dim sr As Long, sc As Long, er As Long, ec As Long, col As Long
        sr = Selection.Row 'start row
        sc = Selection.Column 'start column
        er = Selection.Rows.Count + sr - 1 'end row
        ec = Selection.Columns.Count + sc - 1 'end column
        For col = sc To ec
            Range(Cells(sr, col), Cells(er, col)).TextToColumns
        Next col
    End If
End Sub

在上面,选择用于定义变量,然后这些变量是要循环并应用texttocolumns的特定范围。

请注意,我尚未将其设置为跳过列,例如,不适用于非连续范围;这将适用于跨行/跨列的连续范围。


在加快处理速度方面,可以在执行之前使用关闭screenupdatingcalculationdisplayalerts