2012-08-22 75 views
1

我有一個CSV在以下格式的數據文件:VBA:數據轉換

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中做到這一點?

回答

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腳本運行時。

如果您不想設置引用,請使用遲綁定。將最後3個Dim行這些:

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

嗨,感謝您的熱烈歡迎!運行代碼後,它幾乎完全符合我的需求(拆分和轉換非常好!)唯一的問題是每行爲每個逗號輸出一行。由於它是一個csv文件,因此它會輸出ID列n次,其中n是逗號的數量。通常情況下,你會有一個很小的三胞胎問題。如果數組的元素非空,則僅通過輸出來修復此問題。感謝你的幫助! – GDB

+0

我很高興它有幫助,而且你自己修復它! –

0

如果您已經手動執行此操作,那麼您可以簡單地讓excel爲您錄製VBA。一旦你從開發人員選項卡打開Excel的記錄宏「記錄宏」。然後完成手動完成的所有步驟,然後點擊停止錄製。

在此之後,您可以重新運行宏來檢查操作,或單擊「編輯宏」來啓動VBA編輯器並清理代碼。這應該給你一個很好的VBA代碼基礎。

+0

您好,我試過,但跑進傳遞變量參數分裂細胞功能的「目標」參數一些困難。非常感謝! – GDB