Nhập nhiều tệp vào một sổ làm việc (Microsoft Excel)
Giả sử bạn có một thư mục trên ổ cứng chứa ba mươi tệp văn bản và bạn muốn nhập tất cả chúng vào sổ làm việc Excel. Bạn muốn mỗi tệp văn bản kết thúc trên trang tính của chính nó trong sổ làm việc, do đó bạn sẽ có tổng cộng ba mươi trang tính.
Một cách để thực hiện việc này là thêm thủ công các trang tính mong muốn, sau đó nhập riêng từng tệp văn bản. Điều này, như bạn có thể tưởng tượng, sẽ nhanh chóng trở nên tẻ nhạt. Một giải pháp tốt hơn nhiều là sử dụng macro để thực hiện việc nhập, chẳng hạn như macro sau.
Sub CombineTextFiles() Dim FilesToOpen Dim x As Integer Dim wkbAll As Workbook Dim wkbTemp As Workbook Dim sDelimiter As String On Error GoTo ErrHandler Application.ScreenUpdating = False sDelimiter = "|" FilesToOpen = Application.GetOpenFilename _ (FileFilter:="Text Files (.txt), .txt", _ MultiSelect:=True, Title:="Text Files to Open") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "No Files were selected" GoTo ExitHandler End If x = 1 Set wkbTemp = Workbooks.Open(FileName:=FilesToOpen(x)) wkbTemp.Sheets(1).Copy Set wkbAll = ActiveWorkbook wkbTemp.Close (False) wkbAll.Worksheets(x).Columns("A:A").TextToColumns _ Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, Semicolon:=False, _ Comma:=False, Space:=False, _ Other:=True, OtherChar:="|" x = x + 1 While x <= UBound(FilesToOpen) Set wkbTemp = Workbooks.Open(FileName:=FilesToOpen(x)) With wkbAll wkbTemp.Sheets(1).Move After:=.Sheets(.Sheets.Count) .Worksheets(x).Columns("A:A").TextToColumns _ Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, Semicolon:=False, _ Comma:=False, Space:=False, _ Other:=True, OtherChar:=sDelimiter End With x = x + 1 Wend ExitHandler: Application.ScreenUpdating = True Set wkbAll = Nothing Set wkbTemp = Nothing Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
Macro này cho phép bạn chọn những tệp bạn muốn nhập và sau đó nó đặt dữ liệu từ các tệp đó vào các trang tính riêng biệt trong sổ làm việc. Macro giả định rằng dữ liệu được nhập sử dụng ký tự ống dẫn (|) làm dấu phân cách giữa các trường.
Nếu bạn biết rằng các tệp cần nhập luôn nằm trong thư mục cụ thể và bạn muốn nhập tất cả các tệp trong thư mục đó, thì bạn có thể đơn giản hóa macro một chút. Ví dụ sau giả định rằng các tệp nằm trong thư mục c: \ temp \ load_excel, nhưng bạn có thể thay đổi tên thư mục đó bằng cách thực hiện một thay đổi đơn giản đối với biến fpath trong mã macro.
Sub LoadPipeDelimitedFiles() Dim idx As Integer Dim fpath As String Dim fname As String idx = 0 fpath = "c:\temp\load_excel\" fname = Dir(fpath & "*.txt") While (Len(fname) > 0) idx = idx + 1 Sheets("Sheet" & idx).Select With ActiveSheet.QueryTables.Add(Connection:="TEXT;" _ & fpath & fname, Destination:=Range("A1")) .Name = "a" & idx .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 437 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileOtherDelimiter = "|" .TextFileColumnDataTypes = Array(1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False fname = Dir End With Wend End Sub
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (10400) áp dụng cho Microsoft Excel 2007 và 2010. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: