Barry có một trang tính trong đó một cột chứa nhiều đường dẫn tệp. Anh ấy muốn một cách để chỉ trích xuất tên tệp (phần bên phải dấu gạch chéo ngược cuối cùng) từ mỗi đường dẫn. Anh ấy tự hỏi liệu có cách nào nhanh chóng để thực hiện việc này mà không cần sử dụng tính năng Text to Columns hay không.

Có một số cách khác nhau, tùy thuộc vào việc bạn có muốn sử dụng macro hay không.

Nếu tên tệp của bạn có cùng độ dài, thì bạn có thể chỉ cần sử dụng hàm RIGHT để kéo ra các ký tự cuối cùng. (Công thức này giả định đường dẫn đầy đủ và tên tệp nằm trong ô A1.)

=RIGHT(A1,11)

Điều này giả định rằng tên tệp luôn dài 11 ký tự, chẳng hạn như “text001.txt”. Nếu tên tệp có độ dài khác nhau trong mỗi trường hợp, thì phương pháp này sẽ không hoạt động. Thay vào đó, bạn có thể thử công thức này:

=MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1), LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))

Lưu ý rằng công thức sử dụng hàm SUBSTITUTE hai lần. Trong mỗi trường hợp, nó thay thế dấu gạch chéo ngược (\) bằng một cái gì đó khác. Lần đầu tiên nó thay thế tất cả chúng bằng giá trị ASCII là 1 và lần thứ hai nó thay thế chúng bằng không (một chuỗi trống) để nó có thể xác định có bao nhiêu dấu gạch chéo ngược trong đường dẫn ban đầu. Hàm MID được sử dụng để định vị (với sự trợ giúp của các hàm FIND và SUBSTITUTE) vị trí của dấu gạch chéo ngược cuối cùng trong đường dẫn và trả về mọi thứ sau điểm đó.

Có thể sử dụng công thức ngắn hơn nếu bạn chắc chắn rằng tên tệp sẽ không bao giờ dài hơn 99 ký tự:

=TRIM(RIGHT(SUBSTITUTE(A2,"\",REPT(" ",100)),99))

Công thức này thay thế tất cả các dấu gạch chéo ngược bằng 100 khoảng trắng, lấy 99 ký tự ngoài cùng bên phải từ chuỗi kết quả (đó sẽ là tên tệp với một loạt khoảng trắng ở phía trước) và sau đó cắt bỏ tất cả các khoảng trắng.

Nếu bạn muốn sử dụng macro, bạn có thể tạo một macro lùi lại qua đường dẫn cho đến khi nó định vị dấu gạch chéo ngược cuối cùng. Sau đó, nó trả về mọi thứ sau dấu gạch chéo ngược. Ví dụ sau bắt đầu trong ô B1, kiểm tra mọi thứ ở bên phải của ô (ô A1) và sau đó bắt đầu kéo ra các tên tệp. Nó bước qua tất cả các ô trong cột A và đặt tên tệp, nếu có, vào cột B.

Sub GetFileName1()

Dim Delimiter As String     Dim Target As String     Dim sFile As String     Dim J As Integer     Dim iDataLen As Integer

Delimiter = "\"

Range("B1").Select     Do While ActiveCell.Offset(0, -1).Value <> ""

Target = ActiveCell.Offset(0, -1).Value         iDataLen = Len(Target)

sFile = "Delimiter Not Found"

For J = iDataLen To 2 Step -1             If Mid(Target, J, 1) = Delimiter Then                 sFile = Right(Target, iDataLen - J)

Exit For             End If         Next J         ActiveCell.Formula = sFile         ActiveCell.Offset(1, 0).Select     Loop End Sub

Bạn cũng có thể sử dụng phiên bản macro ngắn hơn nhiều, miễn là bạn có thể sử dụng chức năng Split. Hàm này đã được giới thiệu trong phiên bản VBA được cung cấp với Excel 2000 và nó sẽ kéo một chuỗi ra xa nhau dựa trên dấu phân cách bạn chỉ định và nhồi các phần vào một mảng. Ví dụ này cho thấy giải pháp được triển khai dưới dạng một hàm do người dùng xác định.

Function GetFileName2(File_Path) As String     Dim Parts

Parts = Split(File_Path, Application.PathSeparator)

GetFileName2 = Parts(UBound(Parts))

End Function

Trong cách sử dụng này, hàm Split sử dụng làm dấu phân cách bất kỳ dấu phân tách đường dẫn nào phù hợp với hệ thống mà Excel đang chạy. Phần tử cuối cùng của mảng kết quả (được xác định bằng hàm UBound) chứa phần của đường dẫn ban đầu nằm ở bên phải của dấu phân cách đường dẫn cuối cùng — tên tệp. Để sử dụng hàm, hãy đặt một công thức như thế này vào ô:

=GetFileName2(A1)

_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 (7333) á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: