Thor tự hỏi liệu có cách nào để thực hiện tra cứu mà không cần phải chỉ định một cột hoặc hàng cụ thể và có kết quả là địa chỉ của ô mà tại đó giá trị được tìm thấy hay không. Ví dụ: anh ta muốn tìm kiếm một giá trị (chẳng hạn như 345 hoặc “văn bản của tôi”) và có hàm tìm kiếm tất cả các ô trong tất cả các trang trong sổ làm việc và trả về địa chỉ đầy đủ của ô mà giá trị được tìm thấy.

Cách tiếp cận bạn sử dụng sẽ được quyết định bởi phạm vi bạn muốn tìm kiếm.

Nếu bạn muốn tìm kiếm trên cùng một trang tính mà bạn muốn hiển thị câu trả lời, thì bạn có thể sử dụng công thức, chẳng hạn như sau:

=ADDRESS(MAX(ROW(1:5)(A1:E5="my text")), MAX(COLUMN(A1:E1)(A1:E5="my text")),4)

Công thức này phải được nhập dưới dạng công thức mảng (nhấn Ctrl + Shift + Enter) và nó chỉ tìm kiếm trong phạm vi A1: E5. Nếu muốn, bạn có thể thay đổi phạm vi bằng cách điều chỉnh công thức một cách thích hợp.

Một khu vực tìm kiếm lớn hơn sẽ xem xét toàn bộ trang tính. Điều này vẫn có thể được thực hiện bằng cách sử dụng công thức mảng, chẳng hạn như sau:

=ADDRESS(MAX(ROW(Sheet1!1:65000)(IF(Sheet1!1:65000=$A$1,1,0))), MAX(COLUMN(Sheet1!$1:$65000)IF(Sheet1!1:65000=$A$1,1,0)))

Công thức giả định rằng những gì bạn đang tìm kiếm được lưu trữ trong ô A1.

Bạn nên thay đổi ký hiệu Sheet1 thành tên của bất kỳ trang tính nào bạn muốn tìm kiếm.

Nếu bạn muốn tìm kiếm trong phạm vi rộng hơn, chẳng hạn như tất cả các trang tính trong sổ làm việc, thì giải pháp tốt nhất là sử dụng macro gọi hàm Tìm trong Excel.

Function FindAddr(vValue As Variant)

Dim wks As Worksheet     Dim rCell As Range     Dim bFound As Boolean

bFound = False     For Each wks In ActiveWorkbook.Worksheets         With wks             Set rCell = .Cells.Find _               (What:=vValue, After:=.Cells(1), _               LookIn:=xlValues, LookAt:=xlWhole, _               SearchOrder:=xlByRows, _               SearchDirection:=xlNext, _               MatchCase:=False)

If Not rCell Is Nothing Then                 bFound = True                 Exit For             End If         End With     Next     If bFound Then         FindAddr = wks.Name & "!" & _           rCell.Address(False, False)

Else         FindAddr = "Not Found"

End If     Set wks = Nothing     Set rCell = Nothing End Function

Hàm này được thiết kế để được gọi từ một macro khác, nó chuyển cho nó bất cứ thứ gì cần tìm kiếm trong tham số vValue. Hàm trả về địa chỉ đầy đủ (bao gồm tên trang tính) của kết quả phù hợp đầu tiên hoặc trả về “Không tìm thấy” nếu không có kết quả phù hợ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 (3807) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm 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: