1

次の形式のデータを含む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でこれを行う方法はありますか?

4

2 に答える 2

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

上記では、次のように参照を設定する必要があります。[ツール]>[参照...]>[MicrosoftScriptingRuntime]の横にチェックマークを設定します。

参照を設定したくない場合は、遅延バインディングを使用してください。最後の3Dim行を次のように置き換えます。

Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim txsIn As Object
Dim txsOut As Object
于 2012-08-23T07:35:38.583 に答える
0

すでに手動でこれを行っている場合は、VBAをExcelで記録するだけです。Excelを開いたら、[開発者]タブから[マクロの記録]をクリックします。次に、手動で実行しているすべての手順を完了してから、[記録の停止]をクリックします。

この時点で、マクロを再実行して動作を確認するか、[マクロの編集]をクリックしてVBAエディターを起動し、コードをクリーンアップできます。これにより、操作するVBAコードの非常に優れたベースが得られるはずです。

于 2012-08-22T15:16:47.620 に答える