2011-02-08 21 views
3

複数のテキストファイルを含む1つのフォルダがあり、毎日1つのテキストファイルを追加します。すべてのテキストファイルは同じ形式であり、パイプで区切られています。1つのExcelシートに複数のテキストファイルをインポートできますか?

複数のテキストファイルから1つのワークシートに自動的にデータをインポートするExcel用のコードを作成することはできますか?

フォルダーからすべてのテキストファイルをインポートするコードが見つかりましたが、すべてをカンマ区切りに変更した場合に限ります。また、フォルダにファイルを追加した場合、更新することができませんでした。

ご協力いただければ幸いです!

+0

が最初にそれらを結合し、その結果をインポートしますか?タブで区切りたいと思っている人のための –

答えて

1

ディレクトリ内のすべてのファイルを循環させるためにスクリプトを実行し、すべてのファイルの内容で構成される新しいファイルを新しい行として作成し、それをcsvとして保存するのは簡単ですね。

このようなスクリプトをどこかに保存して毎日実行してから、結果として得られるcsvをExcelで開くことができます。これは、特定のディレクトリ内の各ファイルからデータを取得し、必要なすべてのファイルが1つのディレクトリにあることを前提としています。

4

一般的にファイルを処理する良い方法は、 'FileSystemObject'です。 VBAでこれを使用できるようにするには、あなたはそれへの参照を追加する必要があります。

(ツール\ Referencesメニューを選択参照設定]ダイアログでは、「Microsoftスクリプトランタイム」を選択します。)

次のコード例では、すべての読み取りますフォルダ内のファイルを一度に1行ずつ読み込み、各行を|これらのビットを1行につき1行のセルA1から始まるアクティブなシートに書き込む。

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:\YourDirectory\") 

    ' 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 

サブは、意図的(私は願って)明確なままに簡略化され、ロバストにするための作業が必要になります(たとえば、エラー処理を追加)

+0

は、 "|"の代わりにvbTabを使います。 – kunaguvarun

関連する問題