2017-12-27 22 views
0

동일한 형식과 열을 가진 27 개의 txt 파일을 가지고 있으며이 모든 것을 하나의 엑셀 시트에 추가하고 싶습니다. 나는 몇몇 이전 스레드를 여기에서 검사했다, 그러나 나는 단 하나 시트로 txt fiels를 가져 오는 것을 도운 아래의 코드를 찾을 수 있었다. 그러나 이러한 별도의 시트를 시트에 추가하여 모든 데이터를 추가하려고합니다.하나의 엑셀 시트에 여러 개의 텍스트 파일을 결합

Sub Test() 
'UpdatebyExtendoffice6/7/2016 
    Dim xWb As Workbook 
    Dim xToBook As Workbook 
    Dim xStrPath As String 
    Dim xFileDialog As FileDialog 
    Dim xFile As String 
    Dim xFiles As New Collection 
    Dim I As Long 
    Set xFileDialog = Application.FileDialog(msoFileDialogFolderPicker) 
    xFileDialog.AllowMultiSelect = False 
    xFileDialog.Title = "Select a folder [Vendor_data_25DEC]" 
    If xFileDialog.Show = -1 Then 
     xStrPath = xFileDialog.SelectedItems(1) 
    End If 
    If xStrPath = "" Then Exit Sub 
    If Right(xStrPath, 1) <> "\" Then xStrPath = xStrPath & "\" 
    xFile = Dir(xStrPath) 
    'xFile = Dir(xStrPath & "*.txt") 'this is the original version that you can amend according to file extension 
    If xFile = "" Then 
     MsgBox "No files found", vbInformation, "Vendor_data_25DEC" 
     Exit Sub 
    End If 
    Do While xFile <> "" 
     xFiles.Add xFile, xFile 
     xFile = Dir() 
    Loop 
    Set xToBook = ThisWorkbook 
    If xFiles.Count > 0 Then 
     For I = 1 To xFiles.Count 
      Set xWb = Workbooks.Open(xStrPath & xFiles.Item(I)) 
      xWb.Worksheets(1).Copy after:=xToBook.Sheets(xToBook.Sheets.Count) 
      On Error Resume Next 
      ActiveSheet.Name = xWb.Name 
      On Error GoTo 0 
      xWb.Close False 
     Next 
    End If 
End Sub 

나는 빨리 한 장에 별도의 시트에서 데이터를 결합하기 위해 VBA이 작업을 수행하는 방법을하지 확신합니다. Excel의 통합 기능을 알고 있지만 많은 수동 단계가 포함되어 있으므로보다 빠르고 자동화 된 솔루션을 찾고 있습니다. 어떤 도움이라도 대단히 감사합니다. 미리 감사드립니다.

+0

이들을 다른 곳에 배치해야합니까? – JohnyL

+0

예. 모든 시트의 열 이름은 정확히 동일하므로 파일을 추가 할 때 열 이름을 반복하지 않아도됩니다. –

+0

정기적으로 다시 실행해야 할 필요가있는 항목입니까, 아니면 한 번만 실행해야합니까? – ashleedawg

답변

2
Sub Combiner() 

    Dim strTextFilePath$, strFolder$ 
    Dim wksTarget As Worksheet 
    Dim wksSource As Worksheet 
    Dim x As Long 

    Set wksTarget = Sheets.Add() 
    strFolder = "c:\Temp\test\" 
    strTextFilePath = Dir(strFolder) 

    While Len(strTextFilePath) > 0 
     '// "x" variable is just a counter. 
     '// It's purpose is to track whether the iteration is first or not. 
     '// If iteration is first (x=1), then we include header (zero offset down), 
     '// otherwise - we make an offset (1 row offset down). 
     x = x + 1 
     Set wksSource = Workbooks.Open(strFolder & strTextFilePath).Sheets(1) 
     With wksTarget 
      wksSource.Range("A1").CurrentRegion.Offset(IIf(x = 1, 0, 1)).Copy _ 
         .Cells(.Rows.Count, 1).End(xlUp).Offset(1) 
     End With 
     wksSource.Parent.Close False 
     strTextFilePath = Dir() 
    Wend 

    MsgBox "Well done!", vbInformation 

End Sub 
+0

... 그것은 제외하고 파일의 머리글 행을 건너 뛰기로되어있다. (나는 생각한다) – ashleedawg

+0

@ashleedawg 좋은 지적이지만, OP는 헤더가 있는지 언급하지 않았다. :) – JohnyL

+0

uh huh :-)'열 이름 모든 시트에 정확히 동일하고 파일을 추가 할 때 반복하지 않아도됩니다. – ashleedawg