VBA:数据转换

时间:2012-08-22 14:52:15

标签: vba excel-vba etl excel

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

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

其中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并转置管道变量,然后使用“text to columns”功能将它们拆分。在此之后,我从转置中获取了顶部条目,并将其粘贴在分割数据左侧的一列中。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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

以上要求如下设置参考:工具>参考文献...>设置Microsoft Scripting Runtime旁边的复选标记。

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

Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim txsIn As Object
Dim txsOut As Object