1

我有一个 CSV 文件,其中包含以下格式的数据:

ID,Var1.1|var2.1|var3.1,var1.2|var2.2|var3.2,...,Var1.n|var2.n|var3.n

where在行中ID是唯一的,并且n随每一行而变化。

我想将它在 VBA 中转换为以下格式:

ID,Var1.1,var2.1,var3.1
ID,Var1.2,var2.2,var3.2     
.    
.    
.    
ID,Var1.n,var2.n,var3.n

手动,我一直在做的是将数据导入 excel 并转置管道变量,然后使用“文本到列”功能将它们拆分。在此之后,我从转置中取出顶部条目并将其粘贴到拆分数据左侧的列中 n 次。

知道如何在 VBA 中执行此操作吗?

4

2 回答 2

0

如果您已经手动执行此操作,那么您只需让 excel 为您记录 VBA。一旦你打开excel,从开发人员选项卡中点击“记录宏”。然后手动完成您正在执行的所有步骤,然后点击停止录制。

之后,您可以重新运行宏来检查操作或单击“编辑宏”以启动 VBA 编辑器并清理代码。这应该为您提供一个非常好的 VBA 代码基础。

于 2012-08-22T15:16:47.620 回答
0

这可以完成工作:

Dim i As Long
Dim j As Long
Dim sIn As String
Dim sOut As String
Dim sc() As String
Dim sp() As String
Dim FSO As FileSystemObject: Set FSO = New FileSystemObject
Dim txsIn As TextStream
Dim txsOut As TextStream

Set txsIn = FSO.OpenTextFile("C:\mydir\testIn.txt", ForReading)
Set txsOut = FSO.CreateTextFile("C:\mydir\testOut.txt")

Do Until txsIn.AtEndOfStream
    sIn = txsIn.ReadLine 
    sc = Split(sIn, ",")
    For i = 1 To UBound(sc) ' element 0 contains the ID
        sp = Split(sc(i), "|")
        sOut = sc(0) ' ID
        For j = 0 To UBound(sp)
            sOut = sOut & "," & sp(j) ' varX.X
        Next j
        txsOut.WriteLine sOut
    Next i
Loop
' testOut.txt now contains the desired output

以上需要设置如下引用:Tools > References... > set checkmark next to Microsoft Scripting Runtime。

如果您不想设置引用,请使用后期绑定。用这些替换最后 3Dim行:

Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim txsIn As Object
Dim txsOut As Object
于 2012-08-23T07:35:38.583 回答