Lọc và trích dữ liệu theo nhóm (2 người xem)

Liên hệ QC

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

mickeybh

Thành viên hoạt động
Tham gia
26/9/13
Bài viết
156
Được thích
33
Gửi Anh(Chị) và các bạn trên GPE!

Nhờ các anh chị và các bạn code giúp lọc và trích dữ liệu mong muốn như sheet KetQua.
- sheet dulieu: dữ liệu dùng để trích lọc
- sheet nhomloc: chứa điều kiện lọc của từng nhóm (tương ứng với cột mã thẻ bảo hiểm)
- sheet trichloc: trích lọc dữ liệu theo từng nhóm để báo cáo.
- Kết quả mong muốn như sheet KetQua.
+ Những bệnh nhân có nới đăng ký KCBBĐ (cột F sheet dulieu) khác với 66-194 thì được gọi là bệnh nhân trái tuyến và không phân biệt theo nhóm, những bệnh nhân này sẽ được gán vào phần II của sheet trichloc (cụ thể là ở dòng 20)
+ Những bệnh nhân có nơi đăng ký KCBBĐ 66-194 thì sẽ được xét theo 6 nhóm. Những bệnh nhân thuộc nhóm I thì được chèn vào dưới NHÓM I ở sheet trichloc, tương tự cho các nhóm còn lại và có tổng cộng cho mỗi nhóm ở phía trên.
Phần diễn đạt của em hơi kém, mong anh chị và các bạn giúp đỡ, chỗ nào không hiểu xin các bạn xem dùm sheet KetQua hoặc để lại thắc mắc em sẽ giải thích rõ hơn.
 

File đính kèm

Gửi Anh(Chị) và các bạn trên GPE!

Nhờ các anh chị và các bạn code giúp lọc và trích dữ liệu mong muốn như sheet KetQua.
- sheet dulieu: dữ liệu dùng để trích lọc
- sheet nhomloc: chứa điều kiện lọc của từng nhóm (tương ứng với cột mã thẻ bảo hiểm)
- sheet trichloc: trích lọc dữ liệu theo từng nhóm để báo cáo.
- Kết quả mong muốn như sheet KetQua.
+ Những bệnh nhân có nới đăng ký KCBBĐ (cột F sheet dulieu) khác với 66-194 thì được gọi là bệnh nhân trái tuyến và không phân biệt theo nhóm, những bệnh nhân này sẽ được gán vào phần II của sheet trichloc (cụ thể là ở dòng 20)
+ Những bệnh nhân có nơi đăng ký KCBBĐ 66-194 thì sẽ được xét theo 6 nhóm. Những bệnh nhân thuộc nhóm I thì được chèn vào dưới NHÓM I ở sheet trichloc, tương tự cho các nhóm còn lại và có tổng cộng cho mỗi nhóm ở phía trên.
Phần diễn đạt của em hơi kém, mong anh chị và các bạn giúp đỡ, chỗ nào không hiểu xin các bạn xem dùm sheet KetQua hoặc để lại thắc mắc em sẽ giải thích rõ hơn.
Mình mới biết làm chút ít, bạn xem thử đúng không. Bạn canh chỉnh lại ô dữ liệu nhé.
 

File đính kèm

Mình đã làm 85% công việc bạn yêu cầu; Bạn xem trước đi & ta sẽ bàn tiếp

Các bước xem file:

B1: (Trang 'DuLieu'); Cột "F:f" là cột do macro thêm vào; Trong đó
[F7] là thời gian chạy macro, tính bằng giây
[F8] macro gán tên trường cho cột mới thêm

B2: Từ [F9] cho đến dòng cuối chứa dữ liệu là kết quả của hàm tự tạo do macro đem lại;
Hàm này trợ giúp cho ta sắp xếp theo nhóm mà bạn liệt kê tại 'NhomLoc'
(Fần cuối cột này có các mã lạ để nhường cho bạn ngâm cứu thêm)

B3: Để chạy lại macro, trước tiên bạn chọn cột 'F:F' & xóa nó khỏi trang tính;
Sau đó nhấn tổ hợp fím mà mình đã gán cho nó, đó là {CTRL}+{SHIFT}+L

Chúc vui!
 
Lần chỉnh sửa cuối:
Gửi vanlan_ks: có thể bạn hiểu sai ý của mình.

Gửi Bác SA_DQ!
Các bước xem file:

B1: (Trang 'DuLieu'); Cột "F:f" là cột do macro thêm vào; Trong đó
[F7] là thời gian chạy macro, tính bằng giây
[F8] macro gán tên trường cho cột mới thêm

B2: Từ [F9] cho đến dòng cuối chứa dữ liệu là kết quả của hàm tự tạo do macro đem lại;
Hàm này trợ giúp cho ta sắp xếp theo nhóm mà bạn liệt kê tại 'NhomLoc'
(Fần cuối cột này có các mã lạ để nhường cho bạn ngâm cứu thêm)

B3: Để chạy lại macro, trước tiên bạn chọn cột 'F:F' & xóa nó khỏi trang tính;
Sau đó nhấn tổ hợp fím mà mình đã gán cho nó, đó là {CTRL}+{SHIFT}+L

Chúc vui!
- Em có thử qua macro của Bác, đây chỉ là giai đoạn xếp theo nhóm thôi phải không bác?
- Phần cuối có các mã lạ nhưng thật ra không phải lạ, do code chỉ hiểu 2 ký tự In Hoa mà trong đó có 1 ký tự thường nên nó cho ra rìa :D. Bác upper dùm em cột mã thẻ phát.
- Bác giúp em cho nó ra kết quả luôn rồi xem tiếp. Bác để ý luôn những bệnh nhân có nơi đăng ký KCB BĐ khác 66-194 luôn nha.
Chúc Bác và gia đình cuối tuần vui vẻ!
 
Giờ thì đã gần 95% công việc rồi đây

Bạn xem & kiểm tra theo file

Để chạy lại macro lần nữa, bạn cần thực hiện các bước sau:

B1: Bạn đến cột 'F' của trang 'DuLieu' & xóa cột này khỏi trang tính;

Sang trang 'NhomLoc' & copy 26 cột dữ liệu đầu sang trang 'TrichLoc'

Sau đó chạy macro bằng tổ hợp mà bạn đã biết.

(Xin fép xóa file đính kèm ở bài trước, ngỏ hầu thu lại tài nguyên; File bạn quả là nặng!)
 

File đính kèm

Bạn xem & kiểm tra theo file

Để chạy lại macro lần nữa, bạn cần thực hiện các bước sau:

B1: Bạn đến cột 'F' của trang 'DuLieu' & xóa cột này khỏi trang tính;

Sang trang 'NhomLoc' & copy 26 cột dữ liệu đầu sang trang 'TrichLoc'

Sau đó chạy macro bằng tổ hợp mà bạn đã biết.

(Xin fép xóa file đính kèm ở bài trước, ngỏ hầu thu lại tài nguyên; File bạn quả là nặng!)

Báo cáo với Bác SA_DQ là em thực hiện y như Bác nói nhưng sheet TrichLoc không có gì thay đổi, không có dữ liệu nào được đưa sang sheet đó.
Bác SA_DQ xem lại dùm em hay có sự nhầm lẫn gì không?
 
Bạn lấy file này & bấm chạy macro xem sao

{ctrl}+{shift}+l


;;;;;;;;;;; ;;;;;;;;;;;
 

File đính kèm

Gửi Bác kết quả sau khi chạy macro!
 

File đính kèm

Bạn cần chờ thêm vài người nữa cho biết kết quả chạy file vậy!;
 
Bạn cần chờ thêm vài người nữa cho biết kết quả chạy file vậy!;
dhn46 xác nhận với bác Sa: Code file #7 chưa xếp đối tượng "Dữ liệu khác 66-194" vào mục A. II. Trái tuyến như kết quả của chủ Topic, đồng thời chưa tiến hành tính tổng cho các đầu mục tổng hợp.
 
[ThongBao]dhn46 xác nhận với bác Sa: (2) Code file #7 chưa xếp đối tượng "Dữ liệu khác 66-194" vào mục A. II. Trái tuyến như kết quả của chủ Topic, (1) đồng thời chưa tiến hành tính tổng cho các đầu mục tổng hợp.[/ThongBao]

(1) Chuyện này mình đã thử gắn công thức tại form 'TrichLoc' sau đó chạy macro thì tổng được tính theo công thức luôn.

(2) Chuyện này chưa xét tới, đúng vậy. Đang lay hoay với chủ topic (CTP) về chuyện macro chạy hay chưa chạy!

(3)Có chuyến công tác sang đến năm mới; Xin đề nghị các bạn giúp tiếp dùm cho CTP đi vậy & rất cảm ơn!
 
Cái này thực hiện được, không cần VBA. Nhưng phải đợi lâu (vì cuối năm lu bu lắm).
nếu cần mình sẽ gửi sau
 
Cái này thực hiện được, không cần VBA. Nhưng phải đợi lâu (vì cuối năm lu bu lắm). nếu cần mình sẽ gửi sau
Cảm ơn bạn, trích lọc bằng Advanced filter trước giờ mình vẫn làm được nhưng mất quá nhiều thao tác và khó hướng đến người sử dụng khác nên mình mới kính nhờ các anh chị và các bạn giúp mình code để tự động hoá.

Cảm ơn Bác SA_DQ rất nhiều, năm mới sắp đến cho em gửi lời chúc sức khoẻ và hạnh phúc đến Bác và gia đình nhé.
------------------------------------------
 
Lần chỉnh sửa cuối:
Bạn xem file, bấm tổ hợp phím Ctrl + q để có kết quả

Trong sheet ket qua của bạn cho dữ liệu không đúng
Ví dụ:
- Nhóm II: có 2 mã thẻ "Cb 7661200100245" và "Ck 2661200100428" song không được liệt kê vào danh sách. Và còn rất nhiều số liệu thiếu sót nữa
 

File đính kèm

Cảm ơn bạn rất nhiều!
Mã thẻ Cb và Ck nằm trong nhóm 2 nhưng do mình chạy code cũ (CB, CK thì nó lấy còn chữ thường thì không, thường thì mình kéo upper cho cột thẻ rồi mới chạy code để lấy kết quả đưa lên để minh họa nên không để ý.
Khi thanh quyết toán mình kiểm tra số liệu nguồn và số liệu trích ra trước khi báo cáo.
Mong bạn chỉ ra dùm "nhiều dữ liệu còn thiếu sót" để mình kiểm tra lại.
Cho mình hỏi thêm, nếu mình muốn giữ lại số thứ tự như ban đầu thì phải sửa lại code như thế nào?
Chúc bạn và gia đình cuối tuần vui vẻ!
 
Cảm ơn bạn rất nhiều!
Mã thẻ Cb và Ck nằm trong nhóm 2 nhưng do mình chạy code cũ (CB, CK thì nó lấy còn chữ thường thì không, thường thì mình kéo upper cho cột thẻ rồi mới chạy code để lấy kết quả đưa lên để minh họa nên không để ý.
Khi thanh quyết toán mình kiểm tra số liệu nguồn và số liệu trích ra trước khi báo cáo.
Mong bạn chỉ ra dùm "nhiều dữ liệu còn thiếu sót" để mình kiểm tra lại.
Cho mình hỏi thêm, nếu mình muốn giữ lại số thứ tự như ban đầu thì phải sửa lại code như thế nào?
Chúc bạn và gia đình cuối tuần vui vẻ!
Tôi trả lời 2 câu hỏi của bạn

1 - Câu 1: Cách kiểm tra số liệu thiếu sót - Bạn dùng hàm Countif để so sánh dữ liệu trong sheet kết quả và sheet trích lọc bằng CODE bài #14. Nếu trong sheet trích lọc mà có, sheet kết quả không có => Bạn đã bị thiếu. Bạn có thể nhìn số thứ tự của các nhóm để biết sự sai khác trong 2 kết quả thu về

2 - Câu 2: Cách sửa Code để giữ lại số thứ tự ban đầu
=> Bạn sửa đoạn code sau
Mã:
         Res(k, 1) = k
         For Col = 2 To 23
Thành
Mã:
          For Col = 1 To 23
Trong Code tôi viết có 2 đoạn như thế.

Hy vọng giúp được bạn giải quyết được công việc.
 
Cảm ơn bạn, code và những ghi chú phía sau giúp mình xem hiểu được 1 ít (khả năng có hạn).
Code chạy rất tốt và chính xác hoàn toàn.
Code cũ mình không đưa mã GKS (giấy khai sinh cho những em bé mới sinh ra chưa kịp làm thẻ) nên nó thiếu thì đúng rồi. Trong file mình đưa lên có bổ sung thêm mã GKS trong nhóm lọc nên dữ liệu 2 bên nó mới khác nhau.

Cho mình hỏi thêm dnh46 và các bạn 1 tí, trong code vùng điều kiện bên dưới. Mình muốn khai báo trực tiếp trong code luôn thì phải sửa như thế nào.
ArrNL = Sheet3.Range("B4:K9") 'Vung dieu kien

Và đây là điều kiện của từng nhóm lọc:
("HC,CH,HD,XK", "HT,BT,MS,XB,CC,CK,CB,TC,TQ,TA", "CN,HN", "TE,GKS", "HS", "XV,GD")
 
Lần chỉnh sửa cuối:
.........................................................
Cho mình hỏi thêm dnh46 và các bạn 1 tí, trong code vùng điều kiện bên dưới. Mình muốn khai báo trực tiếp trong code luôn thì phải sửa như thế nào.
ArrNL = Sheet3.Range("B4:K9") 'Vung dieu kien

Và đây là điều kiện của từng nhóm lọc:
("HC,CH,HD,XK", "HT,BT,MS,XB,CC,CK,CB,TC,TQ,TA", "CN,HN", "TE,GKS", "HS", "XV,GD")
Nếu bạn muốn khai báo mảng trực tiếp trong Code thì bạn đi theo hướng sau:
Mã:
ArrNL = Sheet3.Range("B4:K9") 'Vung dieu kien
Có nghĩa là ArrNL là 1 mảng gồm 6 hàng và 10 cột <=> vùng B4:K9 trên sheet
Cấu trúc mảng 2 chiều luôn là : Arr(hàng, cột)

Nên bạn chỉ cần gán giá trị tương ứng vào mảng là được
Ví dụ:
Mã:
'Buoc 1: Khai bao mang 6 hang 10 cot
Dim ArrNL(1 to 6, 1 to 10)
'Buoc 2: gan cac gia tri vao mang
'Dong thu 1 - tuong ung voi B4:K4
ArrNL(1,1)="HC"
ArrNL(1,2)="CH"
ArrNL(1,3)="HD"
ArrNL(1,4)="XK"
'Dong thu 2 tuong ung B5:K5
ArrNL(2,1)="HT"
ArrNL(2,2)="BT"
'.....cu tiep tuc cho toi het
 
Web KT

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

Back
Top Bottom