0

アップロードのために新しいレイアウトに適応させる必要がある大きな csv ファイル (約 10,000 行) があります。

現在、次のような形式になっています。

Index1 Title1 1,2,3,4 Option1 A,B     OtherData
Index2 Title2 1,2,3   Option2 A,B,C,D OtherData
Index3 blank  blank   blank   blank   OtherData
Index4 Title4 1,2     blank   blank   OtherData

このようなものに。

Index1 Title1 1 Option1 A             OtherData
              2         B
              3
              4

Index2 Title2 1 Option2 A             OtherData
              2         B
              3         C
                        D

Index3                                OtherData

Index4 Title4 1                       OtherData
              2

私は VBA をベース レベルでしか理解していません。列は必ずしも ABCD である必要はありません。そのため、列を指定する場所を指定するコメント行をマクロに含めることができれば、非常に役立ちます。

4

1 に答える 1

0

これは、あなたが必要とするようなことをするはずです。私はあなたのファイルがタブ区切りであると仮定しましたが。Microsoft Scripting Runtime への参照を追加する必要がある FileSystemObject を使用してファイルを読み取り、[ツール] > [参照] に移動して、それがチェックされていることを確認します。特定の列番号を探している場所にコメントしましたが、何をすべきかについてのアイデアが得られるはずです。

Dim fs As New FileSystemObject
Dim ts As TextStream
i = 0
Set ts = fs.OpenTextFile("file.csv")
While Not ts.AtEndOfStream
    textline = Split(ts.ReadLine, Chr(9))
    Range("a1").Offset(i).Resize(1, 6).Value = textline  'Assumes there are six columns in the    file
    NewCol1 = Split(textline(2), ",")       'Split the 3rd word into an array (2 as it's zero based)
    NewCol2 = Split(textline(4), ",")       'Split the 5rd word into an array
    RowCount1 = UBound(NewCol1)
    RowCount2 = UBound(NewCol2)
    MaxCount = IIf(RowCount1 > RowCount2, RowCount1, RowCount2) 'Find the largest of the two row    counters as we need to move down this many rows
    If RowCount1 > 0 Then Range("a1").Offset(i, 2).Resize(RowCount1 + 1, 1) = WorksheetFunction.Transpose(NewCol1)  'Put the array vertically in the 3rd column
    If RowCount2 > 0 Then Range("a1").Offset(i, 4).Resize(RowCount2 + 1, 1) = WorksheetFunction.Transpose(NewCol2) 'Put the array vertically in the 5th column (4 along from cell    A1)
    i = i + MaxCount + 1
Wend
于 2013-06-24T00:24:55.407 に答える