Excel VBA Excel迭代列

use*_*816 0 excel vba

我编写了一个简单的VBA脚本,打开给定文件夹中的所有.xls文件,并将这些文件中所需的信息复制并粘贴到新的小册子中.新小册子中的每一行都与文件夹中的文件相关联.像这样

Column1, Column2, Column3  
FileName1, ABC, XYZ  
FileName2, DEF, TUV
Run Code Online (Sandbox Code Playgroud)

第3列中的信息具有格式

Range("C"&X).TextToColumns DataType:=xlDelimited, Other:=True _
OtherChar:="("
Columns("E:E").Insert Shift:=xlToRight *
Range("D"&X).TextToColumn DataType:=xlDelimited, Other:=True _
OtherChar:=")"
Range("C"&X).TextToColumns DataType:=xlDelimited, Other:=True _
OtherChar:="(" **
Columns("E:Z").Delete
Columns("C:C").Delete
Run Code Online (Sandbox Code Playgroud)

因为我希望Column3看起来不错,所以我迭代了每一行并使用了

Column1, Column2, Column3
FileName1, ABC, Very_Important_Info_1
FileName2, DEF, Very_Important_Info_2
Run Code Online (Sandbox Code Playgroud)

最后,我结束了

Column1, Column2, Column3  
FileName1, ABC, XYZ  
FileName2, DEF, TUV
Run Code Online (Sandbox Code Playgroud)

*这是必要的,所以当我第二次调用TextToColumn时,我没有收到一条消息,询问我是否要覆盖该列中已有的内容.

**无论出于什么原因,在调用OtherChar之后:="("我第一次看到的是"(Very_Important_Info)ArbitraryString2"左边的参数仍然附加到信息而不是让它消失.有谁知道为什么这可能是吗?我不介意第二次调用该方法,但没有它,我的列C看起来像"(Very_Important_Info",我不明白为什么它会以这种方式出现.

Mic*_*osa 5

可能会更好地工作 SPLIT

Sub TextToCols()
    Dim rng As Range
    Dim r As Range
    Dim l As Long
    Dim arr As Variant

    With ActiveSheet
        l = .Cells(.Rows.Count, "C").End(xlUp).Row

        Set rng = Range("C2:C" & l)
        For Each r In rng
            r.Value = Application.WorksheetFunction.Substitute(r.Value, ")", "(")
            arr = Split(r.Value, "(")
            Cells(r.Row, 3).Value = arr(1)
        Next r

    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

或者文字到列:

Sub TextToCols()
    Dim rng As Range
    Dim r As Range
    Dim l As Long

    With ActiveSheet
        l = .Cells(.Rows.Count, "C").End(xlUp).Row

        Set rng = Range("C2:C" & l)
        For Each r In rng
            r.Value = Application.WorksheetFunction.Substitute(r.Value, ")", "(")
        Next r

        With .UsedRange.Columns("C").Cells
            .TextToColumns Destination:=Range("C1"), _
            DataType:=xlDelimited, _
            OtherChar:="("
        End With

    End With
End Sub
Run Code Online (Sandbox Code Playgroud)