Lọc danh sách

Liên hệ QC

nhatthai

Thành viên thường trực
Tham gia
16/7/07
Bài viết
221
Được thích
132
Nghề nghiệp
Quản lý dạy nghề
Tôi dang thao tác với danh sách, nhưng gặp khó khăn trong công việc. Nhờ anh em giúp đỡ.
+ Danh sách gốc bao gồm các danh sách học sinh các năm 08-09, 09-10, 10-11, 11-12
+ Danh sách cần lọc : Dựa vào thao tác chọn năm học và điều kiện lọc, lọc ra được danh sách từng năm theo điều kiện trong hộp combo box
Danh sách cần lọc 1:
- Combo box 1 : năm 08-09, 09-10, 10-11, 11-12
- Combo box 2 : Khối 1, Khối 2, Khối 3, Khối 4, Khối 5
Danh sách cần lọc 2:
- Combo box : HS nữ, HSDT, Đi, Đến
Yêu cầu :
Danh sách cần lọc 1: chọn giá trị Combo box 1 = năm 08-09, Combo box 2 = Khối 1 thì lọc được danh sách học sinh khối 1 của năm 08-09 (tương tự cho các thông số khác)
Danh sách cần lọc 2: chọn giá trị Combo box = HS nữ thì toàn bộ học sinh nữ tương ứng với năm học được chọn trong Combo box 1 của Danh sách cần lọc 1 (tương tự cho các thông số khác)
Rất mong các anh em giúp đỡ
Tôi làm mãi mà không được.
Cảm ơn
 

File đính kèm

Em không hiểu từ Khối trong đề bài là gì, nó có liên quan đến năm hay lớp không.
Anh thử cho Khối 1 và năm 08-09, sau đó anh điền dữ liệu vào để minh họa, mọi người sẽ dễ hiểu hơn đó anh
 
Em không hiểu từ Khối trong đề bài là gì, nó có liên quan đến năm hay lớp không.
Anh thử cho Khối 1 và năm 08-09, sau đó anh điền dữ liệu vào để minh họa, mọi người sẽ dễ hiểu hơn đó anh
Khối 1 = 1A, 1B...
Khố 2=2A, 2B ...
......
Tôi gửi lại dữ liệu minh họa, nhờ các bạn giúp
cảm ơn nhiều
------------
Khối 1 và năm 08-09 = học sinh các lớp 1A, 1B... ở danh sách 08-09
------------
To :hoangdanh282vn
Trong file gốc, tôi có sử dụng các name (lấy tên sheet cùa anhtuan)
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn xem trong file xem có được không
 

File đính kèm

Em làm cái lọc theo khối trước, anh làm tiếp cái lọc HS nữ nha
 

File đính kèm

bạn xem cái file này nữa xem có được không?
 

File đính kèm

cảm ƠN tất cả các bạn đã nhiệt tình giúp đỡ, nhưng có lẽ tôi diễn đạt chưa rõ nên chưa được như ý
* Cách lọc danh sách như các bạn hỗ trợ là thỏa mãn điều kiện, nhưng mình lại cần lọc ra trên 1 tập tin khác (mình gửi 2 file mà, một file dữ liệu và 1 file cần lọc)
* Trong file du liệu, mình có sử dụng 1 số name của anhtuan, không biết có ứng dụng gì được vào trường hợp này không
Cảm ơn cả nhà
 
cảm ƠN tất cả các bạn đã nhiệt tình giúp đỡ, nhưng có lẽ tôi diễn đạt chưa rõ nên chưa được như ý
* Cách lọc danh sách như các bạn hỗ trợ là thỏa mãn điều kiện, nhưng mình lại cần lọc ra trên 1 tập tin khác (mình gửi 2 file mà, một file dữ liệu và 1 file cần lọc)
* Trong file du liệu, mình có sử dụng 1 số name của anhtuan, không biết có ứng dụng gì được vào trường hợp này không
Cảm ơn cả nhà
vạy bạn xem lại file này được không nhé!
 

File đính kèm

Tôi dang thao tác với danh sách, nhưng gặp khó khăn trong công việc. Nhờ anh em giúp đỡ.
+ Danh sách gốc bao gồm các danh sách học sinh các năm 08-09, 09-10, 10-11, 11-12
+ Danh sách cần lọc : Dựa vào thao tác chọn năm học và điều kiện lọc, lọc ra được danh sách từng năm theo điều kiện trong hộp combo box
Danh sách cần lọc 1:
- Combo box 1 : năm 08-09, 09-10, 10-11, 11-12
- Combo box 2 : Khối 1, Khối 2, Khối 3, Khối 4, Khối 5
Danh sách cần lọc 2:
- Combo box : HS nữ, HSDT, Đi, Đến
Yêu cầu :
Danh sách cần lọc 1: chọn giá trị Combo box 1 = năm 08-09, Combo box 2 = Khối 1 thì lọc được danh sách học sinh khối 1 của năm 08-09 (tương tự cho các thông số khác)
Danh sách cần lọc 2: chọn giá trị Combo box = HS nữ thì toàn bộ học sinh nữ tương ứng với năm học được chọn trong Combo box 1 của Danh sách cần lọc 1 (tương tự cho các thông số khác)
Rất mong các anh em giúp đỡ
Tôi làm mãi mà không được.
Cảm ơn

Giải pháp 9 trong 1
(xem file đính kèm)​
 

File đính kèm

Lần chỉnh sửa cuối:
Thấy 2 sheet có cấu trúc giống nhau



mình gộp cả 2 loại danh sách vào 1 sheet có được không? (xem file đính kèm)​
Đúng là 2 sheet có cấu trúc giống nhau, nhưng file dữ liệu gốc lớn (>=5mb rồi) nên tính chia lửa để cải thiện tốc độ.
Trước có bài lọc danh sách của bạn, tôi cũng đã làm nhưng để cùng trong file dữ liệu thấy không ổn nên mới tách nhóm ra để xử lý (do để trong file du liệu nó lại làm tăng "kí" cho file này)
Thực ra vấn đề làm tôi lúng túng nhất trong việc lọc các danh sách trên là làm sao để tận dụng được mấy cái name của anhtuan (http://www.giaiphapexcel.com/forum/showthread.php? t=7999)
khi tôi đặt name trực tiếp trong file dữ liệu với hàm indirect thì OK, nhưng khi làm trên 1 book khác thì nó báo toàn -#REF!
Cảm ơn tất cả các bạn đã góp sức. Nhưng thực sự tôi vẫn chưa hiểu
1- vì sao không đặt được name động với indirect
2- Dù đã đặt các name như trong bài của anhtuan và dùng indirect với vùng cố định để đặt tên khi tham chiếu từ book khác lại không được.
 
vạy bạn xem lại file này được không nhé!
Cái này chưa được vì chỉ lọc được danh sách học sinh nữ của khối lớp được lọc ra
Yêu cầu là lọc toàn bộ danh sách học sinh nữ ... toàn danh sách dữ liệu
Du sao cũng rất cảm ơn bạn
 
...
nhưng file dữ liệu gốc lớn (>=5mb rồi) nên tính chia lửa để cải thiện tốc độ
...

Hay nhất câu này. Muốn cải thiện tốc độ mà lại định để dữ liệu ở 1 file, kết quả lọc để ở file khác.
Thực chất vấn đề cách chia lửa (tách ra thành hai phai) của bạn chỉ cải thiện được dung lượng các file của bạn thôi.

Muốn cải thiện tốc độ thì có nhiều yếu tố: nhưng vấn đề sắp xếp dữ liệu -> kéo theo thuật toán hợp lý là 1 trong những yếu tố cải thiện tốc độ dáng kể đó bạn.

VD: dữ liệu được sắp xếp theo Lớp - theo Nữ - Theo Dân tộc, ... sẽ kéo theo thuật toán xét vùng làm việc nhỏ đi 1/5 lần (dùng name động) -> tốc độ được cải thiện đáng kể đó
 
Cái này chưa được vì chỉ lọc được danh sách học sinh nữ của khối lớp được lọc ra
Yêu cầu là lọc toàn bộ danh sách học sinh nữ ... toàn danh sách dữ liệu
Du sao cũng rất cảm ơn bạn
Thứ nhất:
9 trong 1 luôn, nếu bạn xài AdvancedFilter;
Mình đã thử như sau:
Lọc nữ toàn trường;
Nữ toàn khối;
Nữ dân tộc kinh toàn trường hay toàn khối;
Nữ tại 1 lờp nào đó cụ thể;
Thứ hai: Sao bạn lại chia ra vậy, CSDL í mà; người ta đang có xu hướng gộp chung, bạn lại ngược lại; Mà kết quả chưa biết lợi hơn hay hại hơn đây nha;
Mình thử gôm CSDL của bạn trên 1 sheet & lọc bằng AdvFilter như mình nói (gồm 4 nút Validation & 1 nút điều khiển macro) là muốn gì có nấy ngay tấp lự!
Cái đáng giảm là chổ này:
Trường [DanToc] chỉ nên 1 ký tự biểu thị cho mỗi loại dân tộc mà thôi (Vì trường bạn không hơn 36 dân tốc đâu nhỉ?; Mà dù có hơn 55 dân tộc đi chăng nữa, ta vẫn đủ các ký tự trên bàn fím để biểu diễn kia mà; Này nha: @,#,%,$ , <, ? . . . . . . coi như là ký tự thì nó vẫn làm chức năng ký tự được.

Mình cho rằng CSDL trên 500 mà dùng công thức thì nặng ký lắm!

Vài lời cùng bạn, chớ phật lòng!!
 
Theo tôi, yêu cầu của nhatthai chỉ sử dụng VBA là hay nhất, và kết hợp thêm ADO thì quá tuyệt.
Vấn đề là bạn muốn đứng từ đâu để tạo ra baocao. Tại WB BaoCao hay Wb Data.
Làm theo cách thông thường
- Tại BaoCao lấy data vào 1 SH
- Tạo Sub Loc trên Sh Tmp Wb BaoCao, Advance Filter
- Đưa kết quả vào DS01, 02...
 
Theo tôi, yêu cầu của nhatthai chỉ sử dụng VBA là hay nhất, và kết hợp thêm ADO thì quá tuyệt.
Vấn đề là bạn muốn đứng từ đâu để tạo ra baocao. Tại WB BaoCao hay Wb Data.
Làm theo cách thông thường
- Tại BaoCao lấy data vào 1 SH
- Tạo Sub Loc trên Sh Tmp Wb BaoCao, Advance Filter
- Đưa kết quả vào DS01, 02...
-----------------------------------------------------------------
Về CSDL của tôi bao gồm 10 danh sách (79 cột và 3000 dòng 1 danh sách) và nhu cầu khai thác 6700 thông tin số liệu
Khai thác số liệu tôi thực hiện trực tiếp trong cùng 1 wordbook. Hiện nay file đã xong và dung lượng 5.4mb, khởi động wordbook này mất 6 giây
Ngoài ra, tôi còn có nhu cầu khai thác các loại danh sách (cá biệt thông tin như nữ, dt ...) khoảng 20 ds các loại. Các danh sách khai thác này được đưa vào ứng dụng cho các công tác khai thác thông tin thường xuyên.
Chính vì lẽ đó nên tôi thực hiện trên 1 book khác.
Do tôi chưa tìm hiểu về VBA nên chưa thể thực hiện theo ý tưởng này.
Cảm ơn mọi người đã góp ý.
 
-----------------------------------------------------------------

Do tôi chưa tìm hiểu về VBA nên chưa thể thực hiện theo ý tưởng này.
.

Cái này làm bằng VBA thì quá dễ dàng rồi.
Đang định làm bằng VBA, tuy nhiên bạn lại không thích nên thôi.

Nếu muốn chia lửa thì nên thế này (VBA - Dạng đơn giản - Nếu không thích thì bỏ qua nhé)

Cấu trúc chương trình
Programm Folder
  1. File Program : File chương trình : Chỉ có VBA, chỉ có 1 sheet trống
  2. Folder INDEX : Chứa các File danh mục, mỗi danh mục 1 File, không có công thức, không có VBA
  3. Folder DATA : Chứa các File dữ liệu phát sinh, mỗi loại 1 File, không có công thức, không có VBA
  4. Folder REPORT : Chứa các File báo cáo, mỗi loại 1 File, không có công thức, không có VBA
  5. Folder Utilities : Chứa các File về hệ thống chương trình
Khi đó các dữ liệu sẽ được tổng hợp rất nhanh chóng, đừng cố tích hợp tất cả vào 1 File, và tránh lạm dụng công thức (Thậm chỉ đã là VBA rồi thì bỏ hẳn công thức đi)

Thân!
 
Cảm ơn bạn
1-Trước hết tôi cố gắng làm xong bằng công thức để sử dụng đã (vì gần như là đã xong)
2- Cố gắng tìm hiểu về VBA và thực hiện với sự trợ giúp của các thành viên trong diễn đàn (Hiện tại, tôi chưa tiếp cận với VBA, cùng lắm là chỉ Record một số Macro hoặc làm dựa trên code của người khác). Chắc để thực hiện ý tưởng này, với tôi còn nhiều khó khăn (chắc các bạn không cười chứ)
Thân
 
mình là thành viên mới xin nhờ các bạn làm giúp chỗ này nha.
và ình cũng muốn hỏi là hàm "max" có thể lấy được giá trị lớn nhất trong 1 bảng vậy muốn lấy các giá trị tiếp theo nhỏ hơn giá trị max đó thì mình làm thế nào được?
rất mong sớm nhận được sự giúp đỡ của các bạn.
 

File đính kèm

mình là thành viên mới xin nhờ các bạn làm giúp chỗ này nha.
và ình cũng muốn hỏi là hàm "max" có thể lấy được giá trị lớn nhất trong 1 bảng vậy muốn lấy các giá trị tiếp theo nhỏ hơn giá trị max đó thì mình làm thế nào được?
rất mong sớm nhận được sự giúp đỡ của các bạn.

BẠN THAM KHẢO CÁCH LÀM TRONG FILE ĐÍNH KÈM NHA
 

File đính kèm

mình là thành viên mới xin nhờ các bạn làm giúp chỗ này nha.
và ình cũng muốn hỏi là hàm "max" có thể lấy được giá trị lớn nhất trong 1 bảng vậy muốn lấy các giá trị tiếp theo nhỏ hơn giá trị max đó thì mình làm thế nào được?
rất mong sớm nhận được sự giúp đỡ của các bạn.

Muốn tìm giá trị lớn thứ k trong dãy số:
=Large(Dãy số, k)

Bạn nghiên cứu công thức này thử xem.


To boyxin: Anh xem lại công thức lọc ra tên xem. Tại giá trị 11 có hai người khác nhau mà. Cái này hình như đã làm lâu rồi thì phải!
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom