我有一个包含以下格式数据的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中执行此操作吗?
答案 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