2016-09-13 13 views
0

TXTファイル(1列)を持つフォルダが1つあります。 1つのワークシートにインポートする必要がありますが、各ファイルは新しい列にある必要があります。ヘッダーとしてファイル名を追加すると良いでしょう。複数のTXT/CSVを1つのExcelシートにインポートしますが、次の列の各ファイル

新しいファイルが開かれる前に、私はcl要素を増やそうとしています。良い方向ですか?

Set cl = ActiveSheet.Cells(1, i) 
i = i + 1 

以下のコードを変更するにはどうすればよいですか?どんな助けでも大歓迎です!

Sub ReadFilesIntoActiveSheet() 
    Dim fso As FileSystemObject 
    Dim folder As folder 
    Dim file As file 
    Dim FileText As TextStream 
    Dim TextLine As String 
    Dim Items() As String 
    Dim i As Long 
    Dim cl As Range 

    ' Get a FileSystem object 
    Set fso = New FileSystemObject 

    ' get the directory you want 
    Set folder = fso.GetFolder("d:\Projects\Data\") 

    ' set the starting point to write the data to 
    Set cl = ActiveSheet.Cells(1, 1) 

    ' Loop thru all files in the folder 
    For Each file In folder.Files 
     ' Open the file 
     Set FileText = file.OpenAsTextStream(ForReading) 

     ' Read the file one line at a time 
     Do While Not FileText.AtEndOfStream 
      TextLine = FileText.ReadLine 

      ' Parse the line into | delimited pieces 
      Items = Split(TextLine, "|") 

      ' Put data on one row in active sheet 
      For i = 0 To UBound(Items) 
       cl.Offset(0, i).Value = Items(i) 

      Next 

      ' Move to next row 
      Set cl = cl.Offset(1, 0) 
     Loop 

     ' Clean up 
     FileText.Close 


    Next file 

    Set FileText = Nothing 
    Set file = Nothing 
    Set folder = Nothing 
    Set fso = Nothing 

End Sub 
+1

あなたが投稿したコードは、質問には良い試合をいないようですワークシートを見てください。 –

+0

サンプルデータを共有するための最良の方法は何か分かりません。この画像で試してみましょう:[リンク] http://i66.tinypic.com/a3jdde.png列Aは最初のファイルのサンプルを含んでいます。列C-E他のファイルと結合した後に見たいもの。ファイル名はオプションです。データは列Aから始める必要があります。ありがとうございます! – Adam

答えて

0

何か:それはあなたの入力ファイルの一つからいくつかのサンプル日付を投稿するに役立つだろう、ともそれが必要かを示しています。

Sub ReadFilesIntoActiveSheet() 

    Dim fso As FileSystemObject 
    Dim folder As folder 
    Dim file As file 
    Dim FileText As TextStream 
    Dim i As Long 
    Dim cl As Range 

    Set fso = New FileSystemObject 
    Set folder = fso.GetFolder("d:\Projects\Data\") 

    Set cl = ActiveSheet.Cells(1, 1) 

    Application.ScreenUpdating = False 

    For Each file In folder.Files 

     Set FileText = file.OpenAsTextStream(ForReading) 
     cl.Value = file.Name 
     i = 1 

     Do While Not FileText.AtEndOfStream 
      cl.Offset(i, 0).Value = FileText.ReadLine 
      i = i + 1 
     Loop 

     FileText.Close 

     Set cl = cl.Offset(0, 1) 
    Next file 

    Application.ScreenUpdating = True 

    Set FileText = Nothing 
    Set file = Nothing 
    Set folder = Nothing 
    Set fso = Nothing 

End Sub 
+0

私が必要とするもの。ありがとう、ティム! – Adam

0

私はあなたのテキストファイルのデータがすべて1つの列にきれいに収まると仮定します。そのような行や列を反復処理する場合は、常にCells(x, y).Value構文を使用することをお勧めします。

これは最も効率的なやり方であるという保証はありませんが、これはパフォーマンスがあまり重要ではないほど簡単な手順のようです。

あなたはこのような何かをするようにコードを適応させることができます:

Dim RowIndex As Long 'Excel Rows need the Long data type 
    Dim ColumnIndex As Integer ' Not as many columns, so use Integer 

    ' Start at column 1. 
    ColumnIndex = 1 

    ' Do the rest of your file I/O and split into the Items array. 

    ' Here's your column header: 
    Cells(1, ColumnIndex).Value = file.Name 

    ' Start the actual data in row 2. 
    RowIndex = 2 
    For (i = 0 to UBound(Items)) 
     Cells(RowIndex, ColumnIndex).Value = Items(i) 
     RowIndex = RowIndex + 1 
    Next i 

    ' When you're all done, advance ColumnIndex so the next time through 
    ' the loop you're outputting on the next Column. 
    ColumnIndex = ColumnIndex + 1 

これは、あなたが使用しているOffset構文と機能的に同一である必要がありますが、私はCellsを使用すると、どのような指標は、より明白になることを発見しました(行または列、またはその両方)を繰り返します。このような

+0

ありがとうございます。私は使用しようとします! – Adam

関連する問題