Kevin có một sổ làm việc chứa 36 trang tính. Anh ta cần có tên trang tính trong một ô của trang tính đó. Anh ấy đã tạo một hàm do người dùng định nghĩa trả về tên trang tính, nhưng nó trả về cùng một tên trên tất cả 36 trang tính — tên của bất kỳ trang tính nào được hiển thị khi hàm do người dùng xác định được thực thi. Anh ta tự hỏi liệu có một macro, ở dạng hàm do người dùng xác định (UDF), mà anh ta có thể sử dụng sẽ luôn trả về tên của trang tính mà hàm được sử dụng trên đó hay không. Nói cách khác, trong bảng tính 36 bảng của anh ấy, nó sẽ trả về 36 kết quả khác nhau, tùy thuộc vào bảng tính mà nó được sử dụng.

Câu trả lời ngắn gọn là có, có một cách. Trên thực tế, có một số cách. Và, thú vị là bạn không cần phải sử dụng macro hoặc hàm nếu bạn không muốn. Ví dụ: đây là một công thức trang tính thông thường sẽ hoạt động trong bất kỳ ô nào trên trang tính:

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)

Phiên bản của hàm CELL trong công thức này trả về tên đầy đủ của trang tính, bao gồm tên tệp và đường dẫn tệp. Việc sử dụng hàm FIND dẫn đến việc loại bỏ mọi thứ ngoại trừ tên trang tính.

Lưu ý việc sử dụng tham chiếu ô (A1) trong mỗi trường hợp của hàm CELL. Điều này buộc hàm CELL trả về tên của trang tính có chứa tham chiếu ô. Nếu không có nó, bạn sẽ nhận được cùng một kết quả (trang tính đầu tiên) cho mỗi trường hợp của công thức.

Bạn cũng nên biết rằng công thức sẽ không trả về kết quả hợp lệ nếu bạn sử dụng nó trong một sổ làm việc mới — một sổ làm việc chưa được lưu. Bạn cần lưu sổ làm việc để nó thực sự có tên mà hàm CELL có thể trả về thành công. Nó cũng sẽ không hoạt động bình thường nếu tên sổ làm việc hoặc trang tính chứa ký tự trong ngoặc vuông bên phải (“]”). Trong trường hợp đó, bạn sẽ muốn sử dụng một trong các giải pháp khác được thảo luận trong mẹo này.

Nếu bạn thích sử dụng một hàm do người dùng định nghĩa, bạn có thể thử một cái gì đó đơn giản, như hàm này:

Function TabName1() As String     Application.Volatile     TabName1 = ActiveSheet.Name End Function

Tuy nhiên, hàm này sẽ không cung cấp kết quả mong muốn vì nó luôn trả về tên của trang tính đang hoạt động. Điều đó có nghĩa là nếu bạn có hàm được gọi trên từng trang tính trong sổ làm việc của mình, thì hàm sẽ luôn trả về tên của trang tính hiện hoạt trên mỗi trang tính đó, thay vì tên của trang tính mà hàm được sử dụng. Hàm sau cung cấp kết quả tốt hơn:

Function TabName2() As String     Application.Volatile     TabName2 = Application.Caller.Parent.Name End Function

Nếu bạn nghĩ rằng bạn sẽ muốn sử dụng hàm để tham chiếu đến tên trang tính ở nơi khác trong sổ làm việc, thì hàm này sẽ hoạt động tốt hơn cho bạn:

Function TabName3(cell As Range)

TabName3 = cell.Worksheet.Name End Function

Phiên bản này của hàm yêu cầu bạn cung cấp một tham chiếu ô — bất kỳ tham chiếu ô nào — cho một ô trên trang tính có tên bạn muốn sử dụng.

Tất nhiên, nếu bạn không muốn sử dụng một chức năng do người dùng xác định, bạn có thể chỉ cần tạo một macro để nhồi tên của mỗi tab trang tính vào cùng một ô trong mỗi trang tính. Ví dụ: macro sau bước qua từng trang tính trong sổ làm việc và đặt tên của từng trang tính vào ô A1.

Sub TabName4()

For J = 1 To ActiveWorkbook.Sheets.Count         Sheets(J).Cells(1, 1).Value = Sheets(J).Name     Next End Sub

Bạn nên lưu ý rằng cách tiếp cận này không động (nó cần được chạy lại mỗi khi bạn thay đổi tên trang tính hoặc thêm trang tính mới). Nó cũng ghi đè lên bất cứ thứ gì có trong ô A1. (Nếu bạn muốn tên trang tính được đặt trong một ô khác nhau trên mỗi trang tính, hãy thay đổi các giá trị được sử dụng trong bộ sưu tập Ô.)

_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 (11419) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. 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: