Hàm xác định tên sheet

  • Thread starter Thread starter USB1394
  • Ngày gửi Ngày gửi
Liên hệ QC

USB1394

Thành viên hoạt động
Tham gia
20/12/08
Bài viết
173
Được thích
12
Nghề nghiệp
Lính triều đình
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+-+-+-++-+-+-++-+-+-+
 
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+-+-+-++-+-+-++-+-+-+

Bạn thử dùng hàm sau:

=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))
 
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
 
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

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 đó.
Thôi thì dùng VBA lấy cho nó lẹ khỏi đau đầu +-+-+-+
To: @USB1394

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 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 đó.
Đó là vì bạn dùng hàm CELL chưa đúng, hay nói đúng hơn là thiếu 1 tham số
Cứ thế này thì chắc ăn được: CELL("filename",INDIRECT("A1"))
 
=TenHam(sheet1) cho kQ là : BCTC
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
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
 

File đính kèm

Lần chỉnh sửa cuối:
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
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
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ào
Bài gởi của bạn rất hay !!! +-+-+-++-+-+-++-+-+-+ bạn sealand ơi , bạn có thể làm cho hàm ShName tự động cập nhật lại khi mình thay đổi tên sheet ko ?
Xin cám ơn các bạn đã quan tâm và giúp đỡ +-+-+-++-+-+-++-+-+-+
 
Lần chỉnh sửa cuối:
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

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
 
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
Hàm này thiếu nhiều!
1> Phải thêm Application.Volatile vào đầu code để nó tự cập nhật
PHP:
Function TenSheet()
  Application.Volatile
  TenSheet = ActiveSheet.Name
End Function
2> Thế vẫn chưa đủ:
- 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
 
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.
 
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.
Cũng chẳng khó hiễu gì lắm:
- Application.Votalite là để hàm tự cập nhật khi có thay đổi
- Application.ThisCell chính là cell mà ta đang gõ công thức
- Parent là.. cha mẹ, tức là 1 cái gì đó trên cấp với cái trước nó ---> Parent của CELL cũng có nghĩa là Sheet chứa cell ấy
- Application.ThisCell.Parent là sheet chứa cell mà ta đang gõ công thức
Vậy
- Application.ThisCell.Parent.Name chính là tên sheet mà ta cần tìm
Thế thôi
 
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.
 
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?
 
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?

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.
 
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")
 
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")

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.
 
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.
Đã nói muốn tự cập nhật thì phải cho Application.Volatile vào đầu code cơ mà
Sửa code anh sealand thành vầy:
PHP:
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
 
Đúng rồi; mình quên không gép mã Application.Volatile
Cái tên sheet này nó 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á.
 
Lần chỉnh sửa cuối:
Đú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á.
Muốn nó không phân biệt HOA thường thì thêm UCase vào:
PHP:
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
 
Hàm này thiếu nhiều!
1> Phải thêm Application.Volatile vào đầu code để nó tự cập nhật
PHP:
Function TenSheet()
  Application.Volatile
  TenSheet = ActiveSheet.Name
End Function
2> Thế vẫn chưa đủ:
- 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
Nâng cao hơn một chút như thế này được không bạn anhtuan1066
nếu =tensheet() trả về giá trị tên sheet hiện hành
Nếu =tensheet(sheet1) trả về giá trị tên sheet1
Như cái nếu thứ hai thì code phải thêm j nữa bạn.
 
Web KT

Bài viết mới nhất

Back
Top Bottom