Viết name động bằng VBA (1 người xem)

Người dùng đang xem chủ đề này

loinguyen212

Thành viên thường trực
Tham gia
21/2/14
Bài viết
254
Được thích
35
Em xin chào thầy cô, anh chị.
Em có vướng mắc khi viết name động để cho lựa chọn khi sử dụng Data Validation, nên nghĩ đến VBA có thể giải quyết được, mong các thầy cô anh chị giúp đỡ.
 

File đính kèm

Tôi làm bằng Validation bình thường không lập trình, bạn xem nhé
 

File đính kèm

Upvote 0
Em xin chào thầy cô, anh chị.
Em có vướng mắc khi viết name động để cho lựa chọn khi sử dụng Data Validation, nên nghĩ đến VBA có thể giải quyết được, mong các thầy cô anh chị giúp đỡ.
Mã:
=IF(RIGHT(C4)="A",OFFSET(KBNot!$B$4,2,MATCH(DieuDoXe!B4,KBNot!B4:Q4,0),8),OFFSET(KBNot!$B$16,2,MATCH(DieuDoXe!B4,KBNot!B16:Q16,0),8))
Bạn đặt Name Nốt_Giờ_Chạy bằng đoạn code trên, sau đó vào validation = Nốt_Giờ_chạy là ok nhé. Bài này không cần VBA đâu. Anh Ninh giải quyết xong rồi đó
 
Upvote 0
Cảm ơn bác dhn46. Name của bác rất hay. Có vướng mắc ở chỗ là chiều dài của vùng trong offset là cố định, dẫn đến khi xổ xuống danh sách sẽ có vùng trắng, và một khi thêm hoặc bớt trong table "Di" thì vùng xổ xuống cũng sẽ không tự nhận đúng bằng chiều cao của từng cột trong table "Di" đó. Hiểu biết hạn chế, mong bác giải đáp giúp.
 
Upvote 0
Cảm ơn bác Comet. Việc đặt name như trên chưa giải quyết được hết vấn đề em nêu ở trên, mong bác góp ý thêm.
 
Upvote 0
File ban đầu em gửi khi xổ xuống thì sẽ xổ danh sách với chiều dài đúng như khai báo ở sheet KBNot. Không điền nốt thì sẽ không xổ xuống, điền 1 nốt thì xổ đúng 1 nốt, 2 nốt thì xổ 2 nốt và không có dòng trắng, nhưng em đang bị vướng mắc để áp dụng cho nó xổ khi chọn cả ở table dưới (table "Ve") nữa, nên mong các bác giúp đỡ.
 
Upvote 0
Cảm ơn bác dhn46. Name của bác rất hay. Có vướng mắc ở chỗ là chiều dài của vùng trong offset là cố định, dẫn đến khi xổ xuống danh sách sẽ có vùng trắng, và một khi thêm hoặc bớt trong table "Di" thì vùng xổ xuống cũng sẽ không tự nhận đúng bằng chiều cao của từng cột trong table "Di" đó. Hiểu biết hạn chế, mong bác giải đáp giúp.
Bạn sửa Name 1 chút là được. Đặt chuột tại D4
Mã:
=IF(RIGHT(DieuDoXe!C4)="A",OFFSET(KBNot!$A$4,2,MATCH(DieuDoXe!B4,KBNot!$B$4:$AA$4,0),COUNT(OFFSET(KBNot!$A$4,2,MATCH(DieuDoXe!B4,KBNot!$B$4:$AA$4,0),8))),OFFSET(KBNot!$A$16,3,MATCH(DieuDoXe!B4,KBNot!$B$16:$AA$16,0),COUNT(OFFSET(KBNot!$A$16,3,MATCH(DieuDoXe!B4,KBNot!$B$16:$AA$16,0),8))))
 
Upvote 0
Tuyệt vời. Còn một xíu nữa thôi ở chỗ là khi em thêm ở ô K14, sheet KBNot, ví dụ là thêm 22:00. Thì ở đây mình lại phải sửa lại công thức đúng không ạ (sửa từ 8 thành 9 để nó tính số dòng), việc để cho nó counta theo cột của table thì sẽ giải quyết được vấn đề này, nhưng đưa vào name cho nó hiểu thì lại là vấn đề khác. Bác có cao kiến xin chỉ giáo cho em với.
 
Upvote 0
Tuyệt vời. Còn một xíu nữa thôi ở chỗ là khi em thêm ở ô K14, sheet KBNot, ví dụ là thêm 22:00. Thì ở đây mình lại phải sửa lại công thức đúng không ạ (sửa từ 8 thành 9 để nó tính số dòng), việc để cho nó counta theo cột của table thì sẽ giải quyết được vấn đề này, nhưng đưa vào name cho nó hiểu thì lại là vấn đề khác. Bác có cao kiến xin chỉ giáo cho em với.
Thì cứ thay số 8 bằng đoạn counta thôi bạn =counta(K6:K20) chẳng hạn, sau phát sinh thêm thì nên chèn vào giữa rồi chỉnh lại
Là vì bạn về chiều đi, chiều về cùng 1 sheet, hoặc thế này để chiều về lùi xuống khoảng 20 dòng ( thì thời gian chuyến xe chắc ko nhiều quá 20 tuyến một ngày đâu nhỉ)
Chỉ cần lùi chiều về xuống khoảng 20 dòng rồi dùng counta chắc chắn là được nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bác Comet. Ý kiến của bác không phải em chưa nghĩ đến, mà điều em đang muốn hướng đến là tận dụng tính năng của table, không thì em đã không nhồi cái table này vào làm gì cho nặng file, kể cả khi bác insert bao nhiêu đi chăng nữa thì nó vẫn nhận theo việc counta cột của table (với table thì các cột luôn có thể gọi bằng tên mà không cần đặt name, nên rất động).
 
Upvote 0
Cảm ơn bác Comet. Ý kiến của bác không phải em chưa nghĩ đến, mà điều em đang muốn hướng đến là tận dụng tính năng của table, không thì em đã không nhồi cái table này vào làm gì cho nặng file, kể cả khi bác insert bao nhiêu đi chăng nữa thì nó vẫn nhận theo việc counta cột của table (với table thì các cột luôn có thể gọi bằng tên mà không cần đặt name, nên rất động).
Chưa thực sự hiểu được ý bạn, nhưng theo cấu trúc của bạn thì bạn nhập dữ liệu vào K14 bảng dò 1 không tự động thêm dòng. Nếu nhập dữ liệu tại K14, K15 mà tự động thêm dòng thì chắc sẽ có cách bạn ah.
 
Upvote 0
Việc tự thêm vào bảng thì em giải quyết được, (tạm thời bác có thể làm bằng cách để con trỏ chuột vào ô AA13 và ấn tab, rồi bác thêm cho em ở ô K14 là 22:00), nhờ bác chỉ cách cho em, bác viết có cách giải quyết làm em mong chờ quá.
 
Upvote 0
Nếu bạn mở rộng được các bảng của bạn thì bạn thay công thức cho Name các bài trên bằng cái sau
Mã:
=IF(RIGHT(DieuDoXe!D9)="A",OFFSET(KBNot!$A$4,2,MATCH(DieuDoXe!C9,KBNot!$B$4:$AA$4,0),COUNT(OFFSET(KBNot!$A$4,2,MATCH(DieuDoXe!C9,KBNot!$B$4:$AA$4,0),ROWS(Di)))),OFFSET(KBNot!$A$16,3,MATCH(DieuDoXe!C9,KBNot!$B$16:$AA$16,0),COUNT(OFFSET(KBNot!$A$16,3,MATCH(DieuDoXe!C9,KBNot!$B$16:$AA$16,0),ROWS(Ve)))))
 
Upvote 0
Quá tuyệt vời, cảm ơn bác dhn46 rất nhiều, chúc bác công việc thuận lợi và một ngày nhiều niềm vui, thân chào!
 
Upvote 0

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

Back
Top Bottom