Kéo tên tệp vào một trang tính (Microsoft Excel)
Carol có một thư mục với khoảng 1.000 tệp với các tên như YR1905-LIC12345-Smith, Harry-Brown, Mary. Cô ấy muốn đưa tất cả các tên tệp này (không phải tên tệp) vào một trang tính và tách các tên ở dấu gạch ngang. Do đó, tên tệp ví dụ thực sự sẽ chiếm bốn ô trong một hàng. Carol nghĩ rằng điều này sẽ cần một macro để thực hiện, nhưng cô ấy không chắc chắn cách truy cập vào các tên tệp trong macro đó.
Tất nhiên, bạn có thể sử dụng macro để thực hiện việc này, nhưng bạn không cần phải sử dụng macro. Thay vào đó, bạn có thể sử dụng một thủ thuật cũ của thời đại DOS để có được thứ bạn cần.
Tại dấu nhắc lệnh (có thể truy cập thông qua Windows: Start | All Programs | Accessories | Command Prompt), điều hướng cho đến khi bạn ở trong thư mục chứa tệp. Sau đó nhập thông tin sau:
dir /b /a-d > filelist.txt
Thao tác này tạo một tệp văn bản (filelist.txt) chứa danh sách tất cả các tệp trong thư mục hiện tại. Bây giờ, trong Excel, bạn có thể làm theo các bước sau:
-
Trong Excel, hãy nhấp vào công cụ Mở trên thanh công cụ. Excel sẽ hiển thị hộp thoại Mở.
-
Sử dụng danh sách thả xuống Loại tệp ở cuối hộp thoại, cho biết bạn muốn mở Tệp Văn bản (.prn; .txt; * .csv).
-
Điều hướng đến và chọn tệp filelist.txt mà bạn đã tạo tại dấu nhắc lệnh.
-
Nhấp vào Mở. Excel khởi động Trình hướng dẫn Nhập Văn bản, hiển thị hộp thoại Bước 1/3. (Xem Hình 1.)
-
Đảm bảo rằng lựa chọn Delimited được chọn, sau đó nhấp vào Tiếp theo. Excel sẽ hiển thị hộp thoại Bước 2/3.
-
Đảm bảo rằng bạn chỉ định một dấu gạch ngang làm dấu phân cách. (Bạn sẽ cần nhấp vào Khác và sau đó nhập dấu gạch ngang làm dấu phân cách.)
-
Nhấp vào Kết thúc. Tệp của bạn được nhập và bị ngắt ở dấu gạch ngang, giống như bạn muốn.
Các bước trên khá dễ thực hiện, đặc biệt nếu thỉnh thoảng bạn chỉ cần đưa danh sách tệp vào Excel. Nếu bạn cần làm điều đó thường xuyên hơn, thì có lẽ bạn nên tìm cách thực hiện bằng cách sử dụng macro. Macro sau sẽ hoạt động rất nhanh:
Sub GetFileNames() Dim sPath As String Dim sFile As String Dim iRow As Integer Dim iCol As Integer Dim splitFile As Variant 'specify directory to use - must end in "\" sPath = "C:\" iRow = 0 sFile = Dir(sPath) Do While sFile <> "" iRow = iRow + 1 splitFile = Split(sFile, "-") For iCol = 0 To UBound(splitFile) Sheet1.Cells(iRow, iCol + 1) = splitFile(iCol) Next iCol sFile = Dir ' Get next filename Loop End Sub
Khi bạn chạy macro, hãy đảm bảo rằng không có gì trong trang tính hiện tại. (Mọi thứ ở đó sẽ bị ghi đè.) Ngoài ra, bạn nên thay đổi đường dẫn thư mục được gán cho biến sPath ở gần phần đầu của macro.
Nếu bạn gặp lỗi khi chạy macro, rất có thể bạn đang sử dụng Excel 97. Hàm Split (được sử dụng để ngắt tên tệp thành các dấu gạch ngang) đã không được thêm vào VBA cho đến Excel 2000. Nếu bạn đang sử dụng Excel 97 , sau đó bạn có thể sử dụng quy trình sau để mô phỏng chức năng Split hoạt động:
Function Split(Raw As String, Delim As String) As Variant Dim vAry() As String Dim sTemp As String Dim J As Integer Dim Indx As Integer Indx = 0 sTemp = Raw J = InStr(sTemp, Delim) While J > 0 Indx = Indx + 1 ReDim Preserve vAry(1 To Indx) vAry(Indx) = Trim(Left(sTemp, J)) sTemp = Trim(Mid(sTemp, J, Len(sTemp))) J = InStr(sTemp, Delim) Wend Indx = Indx + 1 ReDim Preserve vAry(1 To Indx) vAry(Indx) = Trim(sTemp) Split = vAry() End Function
_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 (11143) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.
Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: