我有一个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中,并转置管道变量,然后使用“文本到列”功能拆分它们。之后,我从转置中取出顶部条目,并将其粘贴到拆分数据左侧的列中n次。
你知道如何在VBA中做到这一点吗?
发布于 2012-08-23 15:35:39
这将完成以下工作:
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发布于 2012-08-22 23:16:48
如果您已经手动执行此操作,则只需让excel为您记录VBA即可。一旦你打开excel,点击“记录宏”从开发人员选项卡。然后手动完成所有步骤,然后单击停止录制。
在此之后,您可以重新运行宏以检查操作,或单击“编辑宏”以启动VBA编辑器并清理代码。这将为您提供一个非常好的VBA代码库。
https://stackoverflow.com/questions/12075839
复制相似问题