Trong EXCEL , có Sheet1,Sheet2, . . . , sao đó mình đổi tên Sheet1 thành BCTC . Cho mình hỏi có hàm nào trả về tên sheet ko?
=TenHam(sheet1) cho kQ là : BCTC
Xin cám ơn
Không được Dom à, không thể lấy lại tên cũ nếu đã đổi tên. Ham trả từ tên sheet1 cũ mà ra tên hiện thời quá khó. Từ phi chưa đổi Codename và dùng hàm UDF lấy CodeName ra để tìm thôi
Function TenSheet()
TenSheet = ActiveSheet.Name
End Function
Đó là vì bạn dùng hàm CELL chưa đúng, hay nói đúng hơn là thiếu 1 tham sốHàm trên vẫn ra kết quả anh à, thế nhưng khi mình sang sheet khác lấy tên sheet của sheet hiện thời thì khi trở về sheet cũ thì thấy nó hiện tên sheet của sheet mình lấy tên trước đó.
Các bạn đọc không ky câu hỏi rồi. Khởi điểm Excel có sheet1, sheet2...Khi sử dụng đổi thành tên mới, giờ phải tìm sheet1 là sheet với tên mới nào=TenHam(sheet1) cho kQ là : BCTC
Function ShName(Ten As String) As String
Dim sh As Worksheet
For Each sh In ThisWorkbook.Sheets
If sh.CodeName = Ten Then ShName = sh.Name
Next
If ShName = "" Then ShName = Ten & " :-Khong ton tai"
End Function
VĐ bạn sealand phân tích rất chính xác : Khởi điểm Excel có sheet1, sheet2...Khi sử dụng đổi thành tên mới, giờ phải tìm sheet1 là sheet với tên mới nàoCác bạn đọc không ky câu hỏi rồi. Khởi điểm Excel có sheet1, sheet2...Khi sử dụng đổi thành tên mới, giờ phải tìm sheet1 là sheet với tên mới nào
Với điều kiện không có thay đổi CodeName thì có thể dùng hàm sau, nếu không thì hết cách
PHP:Function ShName(Ten As String) As String Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets If sh.CodeName = Ten Then ShName = sh.Name Next If ShName = "" Then ShName = Ten & " :-Khong ton tai" End Function
Bạn chép đoạn sau vào Module nhé.
Mã:Function TenSheet() TenSheet = ActiveSheet.Name End Function
Xong trên bấc kì cell nào và trên sheet nào bạn gõ
=TenSheet()
Là xong
Hàm này thiếu nhiều!Mình áp dụng theo cách này của bạn, nhưng gặp phải một vấn đề là khi đổi tên sheet đó, thì hàm đó không tự động tính lại mà lại phải đưa con trỏ vào ô đó rồi nhấn F2 xong nhấn Enter nó mới cập nhật tên mới
Function TenSheet()
Application.Volatile
TenSheet = ActiveSheet.Name
End Function
Function TenSheet()
Application.Volatile
TenSheet = Application.ThisCell.Parent.Name
End Function
Cũng chẳng khó hiễu gì lắm:Mình không hiểu đoạn mã kia lắm, nhưng mình đã làm được theo cách làm của bạn anhtuan1066; đúng như bạn nói.
Trước tiên xin hỏi: SHEET KIA là sheet nào? Phải có gì đó để làm chuẩn chứBạn anhtuan1066 cho mình hỏi thêm một chút.
Bây giờ mình muốn đang ở sheet này mà đọc tên sheet kia thì phải làm sao.
Trước tiên xin hỏi: SHEET KIA là sheet nào? Phải có gì đó để làm chuẩn chứ
Ví dụ thế này thì được:
- Lấy tên sheet đứng bên phải của sheet hiện hành
- Lấy tên sheet đúng bên trái của sheet hiện hành
- Lấy tên sheet đầu tiên
- Lấy tên sheet cuối cùng
vân vân...
Còn bạn nói SHEET KIA có nghĩa là 1 sheet bất kỳ ---> Vậy là sheet nào đây? Nếu đã biết trước sheet ấy là sheet nào rồi thì cần quái gì phải công thức hay code?
Xem lại bài #5 của anh sealand!Xin lỗi, vì mình đã hỏi không cụ thể.
Yêu cầu của mình là từ sheet hiện tại đọc 1 tên sheet cách đó 2 hoặc 3 sheet. Trong quá trình sử dụng người dùng có thể đổi tên sheet đó mà công thức vẫn nhận biết được.
Ý mình muốn làm sao mà tạo được công thức dạng TenSheet(sheet3) với tham số sheet3 là sheet cần đọc tên và có thể đổi tên trong tương lai.
Xem lại bài #5 của anh sealand!
Tuy nhiên không chắc chính xác hoàn toàn vì SheetCodeName không phải lúc nào cũng trùng với tên sheet (có đôi khi SheetCodeName là "Sheet1" nhưng tên sheet ngoài bảng tính lại là "Sheet2")
Đã nói muốn tự cập nhật thì phải cho Application.Volatile vào đầu code cơ màCách của sealand thì nó không cập nhật được khi đổi tên sheet. Thôi mình dùng theo cách của bạn vậy, chỉ tiếc là nó chỉ đọc được tên sheet hiện hành.
Function ShName(Ten As String) As String
Dim sh As Worksheet
Application.Volatile
For Each sh In ThisWorkbook.Sheets
If sh.CodeName = Ten Then ShName = sh.Name
Next
If ShName = "" Then ShName = Ten & " :-Khong ton tai"
End Function
Muốn nó không phân biệt HOA thường thì thêm UCase vào:Đúng rồi; mình quên không gép mã Application.Volatile
Cái tên sheet này phó phân biệt ký tự hoa/thường, suýt nữa thì mình không lần ra.
Cảm ơn các bạn nhá.
Function ShName(Ten As String) As String
Dim sh As Worksheet
Application.Volatile
For Each sh In ThisWorkbook.Sheets
If UCase(sh.CodeName) = UCase(Ten) Then ShName = sh.Name
Next
If ShName = "" Then ShName = Ten & " :-Khong ton tai"
End Function
Nâng cao hơn một chút như thế này được không bạn anhtuan1066Hàm này thiếu nhiều!
1> Phải thêm Application.Volatile vào đầu code để nó tự cập nhật
2> Thế vẫn chưa đủ:PHP:Function TenSheet() Application.Volatile TenSheet = ActiveSheet.Name End Function
- Giả sử tôi gõ hàm tại cell A1 của sheet 1
- Xong, tôi copy cell A1 này và paste vào cell A1 của sheet 2
- Ta thấy kết quả tại sheet2 ra chính xác
- Thế nhưng khi quay lại shéet1 thì thấy kết quả... tầm bậy
Theo tôi phải thế này mới ổn
PHP:Function TenSheet() Application.Volatile TenSheet = Application.ThisCell.Parent.Name End Function