Tổng số bài gửi : 586 Tổng số điểm : 1397 Được cảm ơn : 85 Join date : 05/12/2014
Tiêu đề: Lấy tên ô trong Excel Fri Feb 22, 2019 2:40 pm
ADDRESS(ROW(),COLUMN()) sẽ cung cấp cho bạn địa chỉ, ví dụ: $ A $ 1 của ô hiện tại. Cộng / trừ từ các giá trị hàng / cột (số) để tham chiếu ô bạn đang theo sau.
Nếu bạn không muốn $ thì bạn có thể tìm và thay thế nó bằng SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$","") và chỉ lấy A1 ví dụ
Hàm này sẽ đặt tên của ô NamedRange thuộc về:
Public Function CellName(oCell As Range) As Variant Dim oName As Name For Each oName In ThisWorkbook.Names If oName.RefersToRange.Parent Is oCell.Parent Then If Not Intersect(oCell, oName.RefersToRange) Is Nothing Then CellName = oName.Name Exit Function End If End If Next CellName = CVErr(xlErrNA) End Function Nó lặp qua tất cả các tên trong sổ làm việc, và sau đó cho mỗi tên nó kiểm tra nếu nó đề cập đến bất kỳ điều nào trong tham số đầu vào trang tính này là từ. Nếu nó là sau đó nó sẽ kiểm tra nếu các tế bào đầu vào và các cơn thịnh nộ được gọi bằng tên giao nhau. Nếu họ làm điều đó trả về tên của phạm vi.
6 2018-04-09 18:34
Khi tôi sử dụng chức năng của bạn và đề cập đến câu hỏi của tôi nó có thể hữu ích để thêm Application.Volatile ngay sau khi khai báo hàm. - Voitcus Tôi không biết về thiết lập này ở tất cả .. Học tập trong ngày !! - Adarsha
Trong Excel 2013, và có thể trong một số phiên bản cũ hơn, ĐỊA CHỈ NHÀ() chấp nhận tham số thứ ba xác định định dạng của địa chỉ được trả về với các giá trị sau:
1 - Tuyệt đối (mặc định)
2 - Hàng tuyệt đối / cột tương đối
3 - Hàng tương đối / Cột tuyệt đối
4 - Tương đối
vì vậy hãy nói trong ô A1
ADDRESS(ROW();COLUMN()) //outputs $A$1 ADDRESS(ROW();COLUMN();1) //outputs $A$1 ADDRESS(ROW();COLUMN();2) //outputs A$1 ADDRESS(ROW();COLUMN();3) //outputs $A1 ADDRESS(ROW();COLUMN();4) //outputs A1 Nếu bạn muốn hiển thị tên của ô D3 trong ô A1:
ADDERSS(ROW(D3);COLUMN(D3);4) //outputs text D3 in cell A1
5 2018-04-01 10:24
Tôi đã lấy một số 'lời khuyên' từ câu trả lời ở trên từ Adarsha. Tôi nhận được một kết quả tương tự như mã dưới đây, với vòng lặp đó và một vài sàng lọc. Tuy nhiên, các mẹo 'tip for excel' của tôi là làm cho trình gỡ lỗi của bạn trở thành người bạn tốt nhất của bạn.
' Functionname_of(clls) ' name_of = "" ' Dim nam As String Dim rg As Range Set rg = clls ' nam = rg.Name.Name ' name_of = nam ' End Function 'name_of ' Một chút kiên nhẫn và kiên nhẫn, đã cho tôi chính xác những gì tôi đang tìm kiếm - Một hàm do người dùng định nghĩa cung cấp cho tôi tên được xác định của một ô. Điều gì sẽ xảy ra nếu cùng một ô có nhiều hơn một tên? Hãy thử điều đó và xem. Đó là một bài kiểm tra đơn giản, vì vậy tôi muốn để lại cho bạn để thử nghiệm, học hỏi và truyền đạt kiến thức mới của bạn.
Thưởng thức, ... W
1 2017-11-21 13:32
Tôi thất vọng. Điều đó dường như chỉ hoạt động khi một ô có tên được xác định. Nó xuất hiện cách đáng tin cậy duy nhất để làm điều này là để quét tất cả các tên, và trả lại trận đấu đầu tiên hoặc cuối cùng. - will
Nó không có vẻ là có thể, đó là lạ. Bạn sẽ nghĩ rằng ô () chức năng nên cung cấp một cách để có được tên, nhưng nó không. Rất tiếc.
0 2018-04-09 08:53
Điều gì nếu tên được tham chiếu một phạm vi? Hoặc một công thức (OFFSET, nói) đã xảy ra để bao gồm các tế bào đôi khi, nhưng đôi khi không? Tôi nghĩ rằng MS chỉ tuyên bố vấn đề là "quá khó" và tiếp tục với một cái gì đó dễ dàng hơn. ;-) - Mike Woodhouse Điểm tốt ... Tôi đoán tôi mong đợi để có được tên mà "bao gồm" các tế bào, nếu các tế bào là trong một phạm vi được đặt tên. Tất nhiên có thể có các chức năng khác để giúp giải quyết mọi vấn đề như vậy, tôi ngạc nhiên là không có. - unwind Tôi nghi ngờ đó là một trong những lĩnh vực mà 80% không biết về tính năng và của những người làm, chỉ có 20% chăm sóc. Vì vậy, không có nhiều áp lực để đưa ra một giải pháp. Tốt hơn hết là thiết kế lại giao diện người dùng. - Mike Woodhouse
Điều này sẽ làm việc trong các trường hợp rất cơ bản:
Public Function CellName(cel As Range) As Variant Dim nm As Name For Each nm In Names If nm.RefersTo = "=" & cel.Parent.Name & "!" & cel.Address Then CellName = nm.Name Exit Function End If Next CellName = CVErr(xlErrNA) End Function Nó sẽ không hoạt động nếu ô là một phần của dải ô được đặt tên, ô này sẽ không hiển thị nhiều tên cho ô, nó sẽ không hoạt động đối với các ô được bao gồm trong các công thức được đặt tên (như =OFFSET() phạm vi, ví dụ).
Các
"=" & cel.Parent.Name & "!" & cel.Address điều cũng khá là khó khăn. Có thể có cách tốt hơn để kiểm tra. Tạo một đối tượng Range từ RefersTo và sử dụng Intersect () có thể hoạt động.