Dựa vào dữ liệu của 1 cell mà chạy lệnh tương ứng (1 người xem)

Liên hệ QC

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

haclong_hoahai

Thành viên mới
Tham gia
7/1/16
Bài viết
41
Được thích
53
Kính chào các thầy cô và anh chị,
Tôi mới gia nhập diễn đàn và muốn học hỏi để nâng cao bản thân. Cho phép tôi được đặc câu hỏi sau: Có cách nào mình dựa vào dữ liệu của một ô (cell) nhất định để chạy một lệnh tương ứng (sub).
Ex:
Tôi có 3 subs A B C. Tôi muốn nếu mình chọn dữ liệu ở cell A1 là 1 thì sub A() sẽ chạy và nếu thay đổi dữ liệu thành 2 thì sub B() sẽ chạy etc...

Cảm ơn và xin được hướng dẫn (đã cố gắng search trước khi post new thread nhưng không tìm thấy cái mình tìm)
 
Trước khi giúp mình muốn xác định lại ý của bạn là như thế nào? Có phải chọn dữ liệu tại ô T1 và nháy nút kế bên sẽ lọc dữ liệu ở cột D bằng với T1 đúng không? Thứ hai là bạn tô màu chữ những ô từ L2 đến V9 mục đích để làm gì? Có phải tô màu để xem hay không? Nếu phải tại sao lại có ô thì tô có ô lại không tô? Bạn nêu mục đích cụ thể thì tôi giúp một lần thôi, nếu không chuyên mục này kéo dài hoài đấy.

Trước hết cảm ơn bạn đã nhiệt tình và xin lỗi vì sự khó hiểu đã gây ra. Tôi sẽ cố gắng giải thích cái tôi cần và tại sao một cách rõ ràng.

File này có tác dụng lưu lại những thông tin mà nhân viên gọi điện thoại vào để xin nghỉ bệnh. Mục đích để chúng tôi nắm hàng ngày có bao nhiêu người xin nghỉ bệnh? Những người đó thuộc bộ phận nào và chức vụ nào? Một file sẽ được sử dụng cho một tháng trong năm.

Bạn đã thấy các nút sau:
"New Day": tạo ra một sheet mới cho ngày hôm sau. Tôi chưa biết cách làm sau để nếu có sheet của ngày hôm sau rồi thì không cho tạo thêm
"Sum": sẽ hiển thị lên tất cả các bộ phận và đếm xem có bao nhiêu nhân viên của bộ phận đó rồi hiển thị ở vùng L2:V9. Vùng L2:V9 luôn có dữ liệu nhưng tui đã chọn màu chon font chữ là màu trắng mặc định để khi nào cần xem thì sẽ chuyển sang màu đen mà thôi.
"Hide": làm mất đi vùng L2:V9 bằng cách chuyển ngược lại font chữ thành màu trắng
"Search": tìm kiếm một nhân viên nào đó
"By dept": chọn tên bộ phận tronfg drop list rồi sau đó lọc dữ liệu để cho ra danh sách nhân viên thuộc bộ phận đó mà thôi kèm theo sort theo chức vụ. Bên cạnh đó ở vùng L2:V9 cũng chỉ sẽ hiển thị lên Sum của bộ phận đó mà thôi.

Do tôi không biết rành về VBA và tui sao chép chỉnh sửa những đoạn code lượm lặt được cho nên code nó rườm rà và không theo quy chuẩn (tôi đoán thế). Điều tôi muốn là gộp hai động tác là vừa lọc dữ liệu của bộ phận được chọn rồi hiển thị sum luôn cùng một lúc (hiện tại là 2 thao tác). Và giúp tôi xem lại các đoạn code của tôi xem có cách nào làm ngắn gọn hơn và ko như cái đám rừng như hiện tại.

Tôi rất dở cách diễn đạt nên hy vọng mọi người thông cảm và đừng bực. Chúc ngày mới vui vẻ! Cảm ơn mọi người.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
"New Day": tạo ra một sheet mới cho ngày hôm sau. Tôi chưa biết cách làm sau để nếu có sheet của ngày hôm sau rồi thì không cho tạo thêm
"Sum": sẽ hiển thị lên tất cả các bộ phận và đếm xem có bao nhiêu nhân viên của bộ phận đó rồi hiển thị ở vùng L2:V9. Vùng L2:V9 luôn có dữ liệu nhưng tui đã chọn màu chon font chữ là màu trắng mặc định để khi nào cần xem thì sẽ chuyển sang màu đen mà thôi.
"Hide": làm mất đi vùng L2:V9 bằng cách chuyển ngược lại font chữ thành màu trắng
"Search": tìm kiếm một nhân viên nào đó
"By dept": chọn tên bộ phận tronfg drop list rồi sau đó lọc dữ liệu để cho ra danh sách nhân viên thuộc bộ phận đó mà thôi kèm theo sort theo chức vụ. Bên cạnh đó ở vùng L2:V9 cũng chỉ sẽ hiển thị lên Sum của bộ phận đó mà thôi.
- Tên sheet sẽ được tạo ra là gì? có phải New Day luôn hay không?
- "Sum" tôi nghỉ chỉ cần 2 ô là đủ
- "Hide" là nút lệnh không cần thiết.
- "Search" có phải là chỉ tìm ở cột tên hay không? nếu phải thì theo bạn tìm như thế nào? (hiển thị hộp tìm kiếm, hay lọc ra những nhân viên có tên bạn gõ vào...)
- "By dept" là thống kê theo từng bộ phận, lọc và sắp xếp tôi nghĩ không cần phải tô mà các ô từ L2 đến V9.
Nếu đúng như những gì tôi nêu thì sẽ giúp bạn sửa lại file gốc. Còn một vấn đề cốt lõi quan trọng là bạn phải gởi lại file không đặt password (Vẫn có thể gỡ được trong vòng 3 giây, nhưng vi phạm nội qui) mới giúp được.
 
Upvote 0
- Tên sheet sẽ được tạo ra là gì? có phải New Day luôn hay không?
- "Sum" tôi nghỉ chỉ cần 2 ô là đủ
- "Hide" là nút lệnh không cần thiết.
- "Search" có phải là chỉ tìm ở cột tên hay không? nếu phải thì theo bạn tìm như thế nào? (hiển thị hộp tìm kiếm, hay lọc ra những nhân viên có tên bạn gõ vào...)
- "By dept" là thống kê theo từng bộ phận, lọc và sắp xếp tôi nghĩ không cần phải tô mà các ô từ L2 đến V9.
Nếu đúng như những gì tôi nêu thì sẽ giúp bạn sửa lại file gốc. Còn một vấn đề cốt lõi quan trọng là bạn phải gởi lại file không đặt password (Vẫn có thể gỡ được trong vòng 3 giây, nhưng vi phạm nội qui) mới giúp được.

Cám ơn bạn rất nhiều. Mình nhớ là mình đã gỡ pass trước khi đưa lên. Có thể là mình đã gửi lộn file nên nhận lỗi về điều này.

Phần "seacrh" mình muốn tìm kiếm dựa trên cột "EmpID" (mã số nhân viên) và nếu lọc được thì không có gì tốt hơn bằng. Còn các điều còn lại là đúng theo ý mình. Mình gửi lại file ngay và cám ơn nhiều.
 

File đính kèm

Upvote 0
Mình thực hiện nhưng không biết đúng ý bạn không? Nếu chưa đúng phần nào thì bạn nói rõ phần đó mình giúp tiếp.
http://www.mediafire.com/view/nb3qzq19m3qcrbb/Call_in_SL_log1_-_12_Jan_-_Copy_(1).xlsm

Tuyệt vời và cám ơn bạn rất nhiều. Từ một đám rừng bạn đã tỉa gọn. Dựa trên đó cho mình hỏi 2 câu:
1. Tại sao lại có hay khi nào cần đến đoạn code dưới và nó có ý nghĩa như thế nào?
Mã:
Private Function SheetExists(sname) As Boolean
    Dim x As Object
    On Error Resume Next
    Set x = ActiveWorkbook.Sheets(sname)
    If Err = 0 Then SheetExists = True _
        Else SheetExists = False
End Function

2. Phần hiển thị tổng của từng bộ phận tương ứng trong khu "L2:V9" bạn chuyển thành "V5:V6" sao nó lại hiểu mà đếm được?

Hy vọng mấy câu hỏi ngớ ngẩn không làm phiền lòng. Cám ơn bạn.
 
Upvote 0
1. Tại sao lại có hay khi nào cần đến đoạn code dưới và nó có ý nghĩa như thế nào?
Mã:
Private Function SheetExists(sname) As Boolean
    Dim x As Object
    On Error Resume Next
    Set x = ActiveWorkbook.Sheets(sname)
    If Err = 0 Then SheetExists = True _
        Else SheetExists = False
End Function
Đây là code kiểm tra xem sheet đã có chưa? (Nếu tồn tại tên Sheet thì nó cho kết quả là True còn nếu sai cho kết quả False) Cụ thể là kiểm tra Sheets "New Day" đã tồn tại chưa?
2. Phần hiển thị tổng của từng bộ phận tương ứng trong khu "L2:V9" bạn chuyển thành "V5:V6" sao nó lại hiểu mà đếm được?
Dùng hàm để đếm có sẳn công thức mà bạn.
 
Upvote 0
Web KT

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

Back
Top Bottom