Không sử dụng được hàm lấy sheet name

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

holmes

Thành viên mới
Tham gia
21/11/08
Bài viết
26
Được thích
4
Nghề nghiệp
NV
Em có một file báo cáo theo từng tháng.
em đặt 1 tháng ở 1 sheet để tiện cho việc in ấn.
Rồi đặt tên sheet theo tháng
Giờ em muốn trích xuất tên sheet để đem vào sử dụng trong công thức nhưng bị lỗi #Value. (trong công thức sử dụng hàm cell("filename"))
valueerror01.jpg

Mong các bác giúp đỡ để khắc phục tình trạng này (ko thay bằng hàm index nhé).
Mục đích của việc lấy sheet name là mỗi khi em tạo sheet mới theo tiến độ từ đầu năm đến cuối năm thì không phải sửa lại title, cái này hay quên do hay bị ẩn khi freeze cho gọn, lợi ích thứ hai là giá vật tư tự động nhảy theo tháng khi tạo sheet cho tháng mới. Đừng nói em lười nhé, chỉ là muốn tiết kiệm thời gian để làm việc khác thôi.
 

File đính kèm

Lần chỉnh sửa cuối:
Em có một file báo cáo theo từng tháng.
em đặt 1 tháng ở 1 sheet để tiện cho việc in ấn.
Rồi đặt tên sheet theo tháng
Giờ em muốn trích xuất tên sheet để đem vào sử dụng trong công thức nhưng bị lỗi #Value. (trong công thức sử dụng hàm cell("filename"))
valueerror01.jpg

Mong các bác giúp đỡ để khắc phục tình trạng này (ko thay bằng hàm index nhé).
Mục đích của việc lấy sheet name là mỗi khi em tạo sheet mới theo tiến độ từ đầu năm đến cuối năm thì không phải sửa lại title, cái này hay quên do hay bị ẩn khi freeze cho gọn, lợi ích thứ hai là giá vật tư tự động nhảy theo tháng khi tạo sheet cho tháng mới. Đừng nói em lười nhé, chỉ là muốn tiết kiệm thời gian để làm việc khác thôi.
Chỗ sai trong công thức của bạn là ở chỗ --, dấu này nhằm mục đích chuyển một chuỗi số thành 1 số. Đặt dấu này vào chỉ cho kết quả đúng khi tên sheet của bạn là số, nếu tên sheet là text thì không ổn tí nào. Bạn thử bỏ dấu này đi xem có đúng không nhé.
Cách khác: Bạn thử sử dụng 1 trong 2 công thức sau xem có được không:
=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))
=MID(CELL("filename"),FIND("]",CELL("filename"))+1,100)
Số 100 ở trên có thể thay bởi 1 số khác (thực tế chẳng ai đặt tên sheet dài như vậy cả).
 
Lần chỉnh sửa cuối:
Cám ơn bác, đúng là như vậy thì khắc phục được lỗi value ở ô C1. Nhưng tên sheet đó chắc chắn là một con số rồi, do mình chủ động đặt mà. Có điều lỗi là do khi mình chuyển con chỏ sang sheet khác mà tên sheet đó ko phải là chữ số thôi. Em mới khắc phục đc rồi, thay CELL("filename") thành CELL("filename";A1)
 
Chỗ sai trong công thức của bạn là ở chỗ --, dấu này nhằm mục đích chuyển một chuỗi số thành 1 số. Đặt dấu này vào chỉ cho kết quả đúng khi tên sheet của bạn là số, nếu tên sheet là text thì không ổn tí nào. Bạn thử bỏ dấu này đi xem có đúng không nhé.
Cách khác: Bạn thử sử dụng 1 trong 2 công thức sau xem có được không:


Số 100 ở trên có thể thay bởi 1 số khác (thực tế chẳng ai đặt tên sheet dài như vậy cả).
Ngoài những thứ mà bạn nêu ra, 1 điều cực quan trọng là hàm CELL bắt buộc phải có đủ 2 đối số. Nếu dùng theo kiểu CELL("filename") thì khi ta đang đứng tại sheet chứa công thức, ta thấy kết quả đúng... ta sang 1 sheet khác gõ gì đó rồi quay lại sheet cũ, sẽ thấy công thức sai ngay!
Tóm lại, công thức cũ BẮT BUỘC phải sửa thành:
PHP:
=--MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1)))
Nếu không thì cho dù có làm cách gì cũng sẽ... sai
 
...hàm CELL bắt buộc phải có đủ 2 đối số. Nếu dùng theo kiểu CELL("filename") thì khi ta đang đứng tại sheet chứa công thức, ta thấy kết quả đúng... ta sang 1 sheet khác gõ gì đó rồi quay lại sheet cũ, sẽ thấy công thức sai ngay!
Bác nói quá chuẩn, đúng ý em. Thế không biết trường hợp không có đối số thì có ứng dụng được vào việc gì ko nhỉ.
 
Bác nói quá chuẩn, đúng ý em. Thế không biết trường hợp không có đối số thì có ứng dụng được vào việc gì ko nhỉ.
Nếu không có đối số thứ 2 thì ta ngầm hiểu đang nói đến ActiveSheet ----> Vậy có thể áp dụng nó để đặt 1 name duy nhất lấy tên của Active Sheet, dạng như vầy:
- Đặt name có tên ShName, có Refers to <b>
PHP:
=MID(CELL("filename"),FIND("]",CELL("filename"))+1^NOW(),255)
- Tại bất kỳ sheet nào, cứ gõ công thức =ShName là có ngay tên sheet hiện hành
Tuy nhiên, khả năng cập nhật của nó cũng hơi kém, tức khi ta sang sheet khác, gõ gì đó rồi quay lại sheet chứa công thức, ta sẽ thấy kết quả sai ---> Phải bấm F9 để cập nhật
Khắc phục bằng cách sửa công thức trong Define Name thành:
PHP:
=MID(CELL("filename",INDIRECT("A1")),FIND("]",CELL("filename"))+1,255)
Cuối cùng thì vẫn phải có đối số thứ 2
 

File đính kèm

Lần chỉnh sửa cuối:
Ý em là name của active sheet thì dùng vào việc gì cho hợp i'? vì nó có vẻ ..chạy lung tung quá :D
Còn bác huyentt510 chắc là ghé vào uống nước rồi chuồn rồi :P
 
Ngoài những thứ mà bạn nêu ra, 1 điều cực quan trọng là hàm CELL bắt buộc phải có đủ 2 đối số. Nếu dùng theo kiểu CELL("filename") thì khi ta đang đứng tại sheet chứa công thức, ta thấy kết quả đúng... ta sang 1 sheet khác gõ gì đó rồi quay lại sheet cũ, sẽ thấy công thức sai ngay!
Tóm lại, công thức cũ BẮT BUỘC phải sửa thành:
PHP:
=--MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1)))
Nếu không thì cho dù có làm cách gì cũng sẽ... sai
Quá chính xác. Sáng sớm nay mình đã thử và phát hiện ra điều này nhưng bận việc quá nên ... từ từ đã, chưa kịp sửa bài viết thì bây giờ đã thấy bài này. Công nhận ndu luôn luôn nhanhchính xác. Thanks for all!
 
Ý em là name của active sheet thì dùng vào việc gì cho hợp i'? vì nó có vẻ ..chạy lung tung quá :D
Còn bác huyentt510 chắc là ghé vào uống nước rồi chuồn rồi :P
Bạn xem file thí nghiệm này sẽ hiểu ---> 1 Name áp dụng cho toàn bộ các sheet! Đứng ở sheet nào thì công thức sẽ "tự hiểu" tại sheet ấy
 

File đính kèm

Hi, đặt luôn công thức vào name tiện quá. em áp dụng luôn vào của mình. hehe.
Nhưng đó là bác đang nói về loại có đối số rồi. hic
 
Hi, đặt luôn công thức vào name tiện quá. em áp dụng luôn vào của mình. hehe.
Nhưng đó là bác đang nói về loại có đối số rồi. hic
Thứ nhất: Không có đối số thứ 2 vẫn không sao, có điều khi chuyển sang sheet khác, buộc bạn phải bấm phím F9 để cập nhật
Thứ hai: Cái đối số tôi dùng trong file không giống như cách mà bạn vẫn nghĩ ---> Tôi dùng INDIRECT("A1") hoàn toàn chẳng chỉ định chính xác đến sheet nào cả (nó sẽ tự hiểu là ActiveSheet)
Bạn tự suy nghĩ xem, nếu không dùng INDIRECT("A1") thì liệu bạn có cách nào tạo 1 name tác dụng trên mọi sheet lại vừa có khả năng tự cập nhật như tôi đã làm không?
 
Vâng, đúng là có indirect("A1") vào thì đặt name vào sheet nào nó indirect vào sheet đó đúng ko ạh? Rất tuyệt. Nhưng cái vấn đề của em định hỏi thêm đó, nó hơi khác một xíu, :D e xin trình bày cụ thể hơn thế này:
Không dùng đối số nhé :D Indirect("A1") của bác là đối số mà
Giả sử ở mỗi sheet ta đặt một công thức lấy tên sheet. Ví dụ có 3 sheet: sheet1, sheet2, sheet3. Khi không có đối số thì ta đang đứng ở sheet 3, sau một động tác caculation nào đó thì trên 2 sheet còn lại công thức cũng cho kết quả là sheet3. Như vậy ta cứ đứng ở sheet nào thì tất cả các công thức trên các sheet còn lại đều cho kết quả là sheet name của activeSheet.
Đó, em muốn hỏi là ứng dụng của trường hợp đó cơ.
Mấy câu hỏi của em hơi lan man làm mất thời gian của bác. hi
 
Vâng, đúng là có indirect("A1") vào thì đặt name vào sheet nào nó indirect vào sheet đó đúng ko ạh? Rất tuyệt. Nhưng cái vấn đề của em định hỏi thêm đó, nó hơi khác một xíu, :D e xin trình bày cụ thể hơn thế này:
Không dùng đối số nhé :D Indirect("A1") của bác là đối số mà
Giả sử ở mỗi sheet ta đặt một công thức lấy tên sheet. Ví dụ có 3 sheet: sheet1, sheet2, sheet3. Khi không có đối số thì ta đang đứng ở sheet 3, sau một động tác caculation nào đó thì trên 2 sheet còn lại công thức cũng cho kết quả là sheet3. Như vậy ta cứ đứng ở sheet nào thì tất cả các công thức trên các sheet còn lại đều cho kết quả là sheet name của activeSheet.
Đó, em muốn hỏi là ứng dụng của trường hợp đó cơ.
Mấy câu hỏi của em hơi lan man làm mất thời gian của bác. hi
Tôi hiểu mà! Và những nhận định của bạn đều đúng cả (chứng tỏ bạn quá rành hàm CELL rồi)
Chính vì bạn nói:
Ví dụ có 3 sheet: sheet1, sheet2, sheet3. Khi không có đối số thì ta đang đứng ở sheet 3, sau một động tác caculation nào đó thì trên 2 sheet còn lại công thức cũng cho kết quả là sheet3
Tức công thức này luôn cho cùng 1 kết quả, tùy theo ta đang ở sheet nào, vì thế mà rất khó ứng dụng nó vào 1 việc cụ thể nào
Cái INDIRECT("Á1") tôi cho vào là dung hòa giữa 2 cách dùng CELL("filename") và CELL("filename",A1) đấy
Chưa nói đến chuyện nếu không có đối số thứ 2 thì hàm sẽ không có khả năng tự cập nhật (trừ khi có động tác làm cho Excel phải tính toán lại)
 
Web KT

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

Back
Top Bottom