首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA:数据转换

VBA:数据转换
EN

Stack Overflow用户
提问于 2012-08-22 22:52:15
回答 2查看 1.2K关注 0票数 1

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

代码语言:javascript
复制
ID,Var1.1|var2.1|var3.1,var1.2|var2.2|var3.2,...,Var1.n|var2.n|var3.n

其中,ID在行中是唯一的,而n在各行中各不相同。

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

代码语言:javascript
复制
ID,Var1.1,var2.1,var3.1
ID,Var1.2,var2.2,var3.2     
.    
.    
.    
ID,Var1.n,var2.n,var3.n

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

你知道如何在VBA中做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-23 15:35:39

这将完成以下工作:

代码语言:javascript
复制
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替换为以下内容:

代码语言:javascript
复制
Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim txsIn As Object
Dim txsOut As Object
票数 0
EN

Stack Overflow用户

发布于 2012-08-22 23:16:48

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12075839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档