Tim và lấy giá trị thoả mãn nhiều đều kiện?

  • Thread starter Tuanktcdcn
  • Ngày gửi
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
41
Hà Nội
www.bluesofts.net
#1
Trong Excel có hàm Vlookup, Hlookup,..để tìm và cho ra một giá trị náo đó, những hàm này đơn thuần là tìm theo một điều kiện hay một giá trị.
Trong một CSDL các thông tim thường có liên hệ với nhau, đôi khi chúng ta cần tìm ra một giá trị thoả mãn n hiều điều kiện.
VD: Mình muốn tìm một nhân viên mà:
- Có gia đình
- Số con <3
- Số ngày công >=26

Các thông tin về gia đình, số con nằm trong DMNV, ngày công có trong sổ chấm công.

Với VD trên thì hình như các công cụ của Excel và các hàm không làm được?
(Autofilter và Advance Filter chỉ thực hiện trên một sổ -sheet))

Mình muốn gõ công thức vào một ô để nhận được tên nhân viên thoả mãn các điều kiện trên.

Các bạn xem có cách nào làm được không? Kể cả việc ứng dụng VBA.
Cảm ơn các bạn!
 
H

handung107

Thành viên thân thiết
28/8/04
576
13
0
VN
www.giaiphapexcel.com
#2
Có thật là Tuanktcdcn hỏi câu này không đấy ? Nếu có ai giải được thì có thưởng không nhỉ ?
 
O

omron

Sơ cấp
28/6/05
34
0
0
42
TPHCM
#3
Phải thiệt hay giỡn vậy bác Tuanktcdcn ! cái này bác đố hay k biết thật. Không biết chết liền đó.
 
Q

quocnghia

Sơ cấp
24/3/04
64
0
0
#4
cuối năm mà bác Tuanktcdcn còn giỡn. Cái này k cần VBA đâu, Excel hỗ trợ rồi mà ! Hi hi
 
D

duyennt

Thành viên thân thiết
14/7/05
94
0
6
Bình Dương
#5
Tôi nghĩ bác Tuanktcdcn này "phá" mọi người chút thôi, chứ việc này thì chỉ cần kết hợp hàm If với Vlookup là tìm ra được những người thỏa mãn điều kiện đó thôi.
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
37
Nha Trang
#6
He he. Có 4 bài trả lời nhưng cả bốn bài đều có chung một thắc mắc là không biết người post câu hỏi là ai :biggrin: ? Liệu có phải là Tuanktcdcn đang phá mọi người hay liệu có ai đó dùng nick của anh Tuanktcdcn để hỏi. Cái này phải mở cuộc điều tra thật nghiêm túc àh nha :Biggrin:
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
41
Hà Nội
www.bluesofts.net
#7
handung107 nói:
Có thật là Tuanktcdcn hỏi câu này không đấy ? Nếu có ai giải được thì có thưởng không nhỉ ?
Đúng chị Dung ạ! Bác nào giải giúp em sẽ có quà.
omron nói:
Phải thiệt hay giỡn vậy bác Tuanktcdcn ! cái này bác đố hay k biết thật. Không biết chết liền đó.
quocnghia nói:
cuối năm mà bác Tuanktcdcn còn giỡn. Cái này k cần VBA đâu, Excel hỗ trợ rồi mà ! Hi hi
duyennt nói:
Tôi nghĩ bác Tuanktcdcn này "phá" mọi người chút thôi, chứ việc này thì chỉ cần kết hợp hàm If với Vlookup là tìm ra được những người thỏa mãn điều kiện đó thôi.
NguyênBình nói:
He he. Có 4 bài trả lời nhưng cả bốn bài đều có chung một thắc mắc là không biết người post câu hỏi là ai ? Liệu có phải là Tuanktcdcn đang phá mọi người hay liệu có ai đó dùng nick của anh Tuanktcdcn để hỏi. Cái này phải mở cuộc điều tra thật nghiêm túc àh nha :Biggrin:
Chết em! Các bác bây giờ không tin em nữa rồi? Quả thực trước đây I thường tính bằng các hàm thống kê (Sum,SumProduct,Count...), có dùng Autofilter, Advance Filter để lọc nhưng nó cho ra danh sách.
Giờ mình muốn lấy một giá trị tại một ô mà giá trị tìm được thỏa mãn n điều kiện? Quả thực vấn đề này mình chưa làm các bác ạ! I nghĩ thấy có vẻ khó nên post bài để hỏi.

Các bác giúp nhé!
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
37
Nha Trang
#8
Nếu quả thật như vậy thì chuyện của bác Tuanktcdcn ắc hẳn không bình thường. Bác hãy cho lên một file đính kèm để mọi người còn đánh giá vấn đề chứ chắc là chưa ai tưởng tượng vấn đề của bác nghiêm trọng đến mức nào?
 
A

Anh Hong

Sơ cấp
11/1/06
1
0
0
Ha Noi
#9
Tôi là một thành viên mới, và cũng đang có cùng khúc mắc như bác Tuanktcdcn.
Tôi đang phải quản lý rất nhiều khoá học và danh sách học viên của các khoá. Để thống kê một học viên nào đó đã tham gia bao nhiêu khoá học (có chi tiết các khoá học) thì phải làm thế nào?
Để kiểm tra một số học viên hoặc một nhóm học viên xem họ có tham gia vào 1 khoá đào tạo nào đó ko thì dùng hàm nào? Cách dùng.
Rất mong các bác chỉ giúp e. Thanks các bác trước.
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
37
Nha Trang
#10
Em cũng quên mất cái vụ này tự dưng chìm xuồng.

Anh Hong: Bác có thể gởi cho em file của bác em sẽ up nó lên đây cho mọi người tham khảo thì hay hơn. Mong bác.
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#11
Theo tôi nghỉ cái gì cũng có giới hạn của nó.
Giới hạn về số lượng: Trước hết là cấu trúc của CSDL, vấn đề anh Tuân đặt ra là tìm trên CSDL record nào có giá trị các trường (biến) từ A1 đến An thỏa mãn các điều kiện X1-Xn. Giá trị trả về là giá trị của biến An+1 chẳng hạn, hoặc là số index của record đó. Trong CSDL có n biến thôi, nếu n cố định hoặc max 1 số nào đó thì được.
Giới hạn kiểu: Trong tất cả các điều kiện X1-Xn là đk True/False, =, >, >=, <> v...v, kiểu thì có kiểu ngày (với các đk =, >, >=, <, <=, <>, between...), số, text v...v. Ta phải đưa ra 1 số điều kiện chuẩn thì được chứ không đưa ra thì chịu.
Tóm lại trên 1 CSDL mà số biến cũng như kiểu biến, điều kiện tìm kiếm là "xác định" thì dùng VBA không khó khăn gì. Nếu "không xác định" thì.... chịu!
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
41
Hà Nội
www.bluesofts.net
#12
Vẫn chưa làm được

Mình gửi file lên đây nhờ các bạn chỉ giúp.
Cách 1- Lập công thức?
Cách 2- VBA ?

Mình nghĩ với cách 1 phải cố định số điều kiện thì mới làm được, còn cách 2 thì số điều kiện sẽ "động" hơn (có thể n điều kiện)?

Bằng VBA thì mình có thể sẽ làm được, nhưng lập công thức (cách 1) thì hiện nay chưa.

Cảm ơn các bạn!
 

Đính kèm

Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
3
18
Khánh Hòa
#13
Dear TuanKTCDCN,
-------------------
Theo em hiểu thì việc tổ chức các bảng cơ sở như trong file đính kèm của bác là bắt buộc(?). Nếu không, em có thể tạo một bảng phụ hoặc là gộp luôn cả 2 bảng vào làm 1. Xử lý sẽ rất đơn giản bằng Filter.
Còn nếu điều kiện lọc bắt buộc nằm trên nhiều bảng như vậy, em sẽ phải lọc điều kiện qua 2 bước:
Bước 1: Lọc điều kiện trên bảng chấm công
Bước 2: Lọc điều kiện trong bảng hồ sơ, kết hợp với mã tìm được ở bước 1.
Vấn đề sẽ đơn giản nếu tổ chức lại cơ sở dữ liệu đáp ứng được yêu cầu, mặc dù chưa được tối ưu lắm!
(Trong file đính kèm em gộp 2 bảng cơ sở dữ liệu làm 1, hơi thừa nhưng đáp ứng được yêu cầu thống kê)
 
Sửa lần cuối:
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#14
Vấn đề của anh Tuân là tìm giải pháp từ công thức hay VBA để giải quyết chuyện của Querry. Nếu dùng công cụ truy vấn tin để tìm những giá trị thỏa mãn từ n Databse thì...
Ý tưởng của em là chôm 1 công cụ Querry nào đó, dùng VBA để điểu khiển.
Đồ chơi trong Excel kiểu này hình như là Ms Querry thì phải, nhưng điều khiển nó = VBA thì chịu.
 
Sửa lần cuối:
IChiNoVa

IChiNoVa

Phu cà phê
2/4/05
134
4
18
Sòn Gài
www.xommuaban.vn
#15
Đối với các giá trị: ">=26", "<3",
Sao mít tơ Tuan không ghi thành 26; 3 thôi, bỏ dấu ">, <, =" đi. Coi như quy ước nó là lớn hơn hoặc bằng 26, nhỏ hơn 3.

Làm như vậy có phải là dễ xử lý không, đỡ phải xử lý nhiều
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
41
Hà Nội
www.bluesofts.net
#16
Đào Việt Cường nói:
Dear TuanKTCDCN,
-------------------
Theo em hiểu thì việc tổ chức các bảng cơ sở như trong file đính kèm của bác là bắt buộc(?). Nếu không, em có thể tạo một bảng phụ hoặc là gộp luôn cả 2 bảng vào làm 1. Xử lý sẽ rất đơn giản bằng Filter.
Còn nếu điều kiện lọc bắt buộc nằm trên nhiều bảng như vậy, em sẽ phải lọc điều kiện qua 2 bước:
Bước 1: Lọc điều kiện trên bảng chấm công
Bước 2: Lọc điều kiện trong bảng hồ sơ, kết hợp với mã tìm được ở bước 1.
Vấn đề sẽ đơn giản nếu tổ chức lại cơ sở dữ liệu đáp ứng được yêu cầu, mặc dù chưa được tối ưu lắm!
(Trong file đính kèm em gộp 2 bảng cơ sở dữ liệu làm 1, hơi thừa nhưng đáp ứng được yêu cầu thống kê)
Cảm ơn bạn Cường

Ghép bảng và dùng Filter, Advance Filter cũng được nhưng không ổn khi quản trị CSDL, không phải cứ có điều kiện thì lại thêm cột.

Có thể dùng công thức trong ô (=?) để nhận giá trị được không?

IChiNoVa nói:
Đối với các giá trị: ">=26", "<3",
Sao mít tơ Tuan không ghi thành 26; 3 thôi, bỏ dấu ">, <, =" đi. Coi như quy ước nó là lớn hơn hoặc bằng 26, nhỏ hơn 3.

Làm như vậy có phải là dễ xử lý không, đỡ phải xử lý nhiều
Vâng, để đơn giản hóa trong bài này có thể tự hiểu vậy.

adam_tran nói:
Vấn đề của anh Tuân là tìm giải pháp từ công thức hay VBA để giải quyết chuyện của Querry. Nếu dùng công cụ truy vấn tin để tìm những giá trị thỏa mãn từ n Databse thì...
Ý tưởng của em là chôm 1 công cụ Querry nào đó, dùng VBA để điểu khiển.
Đồ chơi trong Excel kiểu này hình như là Ms Querry thì phải, nhưng điều khiển nó = VBA thì chịu.
Dùng Query bàng dòng lệnh (VBA) có lẽ là giải pháp tốt. Nếu không rõ về Excel Query thì vẫn có thể có cách khác.

Cảm ơn và mong các bạn tiếp tục quan tâm!
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
3
18
Khánh Hòa
#17
Dear all,
-------
Trong trường hợp bắt buộc như thế này, chọn giải pháp Query là thích hợp nhất.
Nhưng nếu xử lý Query bằng MS Access thì mạnh hơn nhiều.
Việc chuyển đổi từ Excel sang Access không mất mấy công đâu ạ!
Hi vọng đây cũng là một giải pháp!
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,012
125
63
44
Hà nội
vnuni.net
#18
Đào Việt Cường nói:
Dear all,
-------
Trong trường hợp bắt buộc như thế này, chọn giải pháp Query là thích hợp nhất.
Nhưng nếu xử lý Query bằng MS Access thì mạnh hơn nhiều.
Việc chuyển đổi từ Excel sang Access không mất mấy công đâu ạ!
Hi vọng đây cũng là một giải pháp!
:biggrin:

strSQL = "....." Thì ở đâu cũng giống nhau.

Query bằng MS Access, MS Query và thậm chí ...ui, nhiều tools lắm... cũng chỉ là công cụ để thể hiện cái PL SQL ra thôi (cho phép ta tạo các câu lệnh SQL 1 cách visualize). (ko hiểu có mấy người hiểu PL SQL có nghĩa là gì nhỉ?). Vì thế, nếu muốn so sánh bất kỳ cái gì với nhau, tốt nhất mọi người xem nó có cùng bản chất ko đã nhé.

Chú ý:

Chương trình (writen in programing IDE) -->> Database Engine -->> Database
Ví dụ về Database Engine, nôm na là DAO, RDO, ADO, v.v... ODBC, ODBC APIs,... thì nó là... giá mà show cho mọi người cái model nhỉ. Ko vẽ được nên hơi khó nói.

Ở mỗi loại Database thì ngôn ngữ sql riêng cho từng món hơi khác nhau chút nhưng nó có những điểm chung. Đó gọi là ngôn ngữ SQL.

....
 
Sửa lần cuối:
IChiNoVa

IChiNoVa

Phu cà phê
2/4/05
134
4
18
Sòn Gài
www.xommuaban.vn
#19
Mít tơ Hải tu hải làm một mớ như vậy, mình đọc mà muốn bệnh luôn.
Đừng có phức tạp hóa vấn đề lên chứ.

Mình quy ước: Những các giá trị: 26, 3, 1 gọi là giá trị so sánh.
Còn những thứ như: gia đình, số con, số công của từng người là giá trị bị so sánh.
Cái này giống như số trừ và số bị trừ đấy hì hì....

Trước tiên, mình sẽ khởi tạo vài biến (nếu biết trước là sẽ có bao nhiêu giá trị so sánh) để chứa các giá trị so sánh:
đối với file của Mr Tuan, mình tạo 3 biến a, b, c. Mà cũng chỉ cần 2 biến là được bởi vì giá trị gia đình là 0 hoặc 1.

Đó là trường hợp chỉ có 3 thứ để so sánh, nếu phát sinh thêm nhiều thứ khác, mà không thể biết được sẽ phải tạo bao nhiêu biến thì không thể dùng biến như trên được, mà phải dùng mảng A[i...n]

Mỗi A chứa một giá trị so sánh.

Mảng này mình khai báo nhỏ thôi khoảng 10 chẳng hạn.
Làm gì có ông nội nào so sánh nhiều điều kiện quá.

Để gán giá trị so sánh cho biến, mình dùng refedit,
Hoặc cho nó làm tham số truyền vào của thủ tục luôn.

Đến đây thì còn gì nữa đâu,
Dùng While hoặc Repeat để duyệt từ trên xuống dưới đến khi nào không còn nhân viên nào thì thôi. Hoặc tổng hợp số lượng nhân viên trước sau đó dùng For.

PP1: kiểm tra từng người.
Trước tiên so sánh số công, nếu số công OK, thì so sánh đến gia đình, nếu có gia đình, thì so sánh tiếp số con.

Nếu trong công ty có ai mà chưa có gia đình, mà vẫn có con thì phải phải kiểm tra số con. hì hì.....

PP2: Kiểm tra từng Sheet.
Trước tiên ở sheet chấm công, tìm ra những người thỏa mãn điều kiện về số công. Lưu lại mã nhân viên thỏa điều kiện.

ở sheet Hồ sơ, tìm ra những người thỏa mãn về số con, và gia đình. Lưu lại mã nhân viên thỏa điều kiện.

Sau đó so sánh 2 kết quả tìm được ở 2 sheet, chọn ra những mã nhân viên nào mà có mặt ở cả 2 kết quả trên.
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
3
18
Khánh Hòa
#20
Dear IChiNoVa,
---------------
Giờ thì em mới hiểu vì sao bác "Cám ơn cái mông của tôi!" :biggrin:
Em không biết vòng duyệt của bác chạy nhanh đến mức nào khi mà bảng cơ sở dữ liệu đầy lên và các điều kiện so sánh dài ra.
Chắc là chúng ta phải thi xem ai giành được giải thưởng của bác Tuân nhé!
Thôi được, tạm gác không màng tới MS Access nữa. Và nếu ngại đụng đến MS Query, cách mà em vẫn thường làm đối với sổ kế toán:
- Tạo ra một vùng điều kiện trong đó các cột phải tương ứng với bảng cần Filter (trong trường hợp này em sẽ chọn bảng Hoso là bảng filter vì nó có nhiều điều kiện hơn)
- Lọc bảng có điều kiện ít trước: ở đây bảng Chamcong chỉ có một điều kiện - em lọc bảng này trước để tìm ra những thoả điều kiện
- Copy mã tìm được vào bảng điều kiện sau đó thực hiện lọc bảng Hoso
Em nghĩ cách này không cần dùng vòng duyệt nào sẽ nhanh hơn và đáp ứng được mọi điều kiện, kể cả việc mở rộng thêm điều kiện!
 

BQT trực tuyến

  • Rua Diu Dang
    Rua Diu Dang
    Điều hành cao cấp

Thành viên trực tuyến

  • Rua Diu Dang
  • AZ Invoice
  • daongocnam0603
  • xediengiatot
  • Vũ Hải BÌnh
  • baotudau
  • Nguyenthingocdiem85
  • hoaithuong140901
  • thoibimat
  • Anh Huyền Nguyễn



Xem nhiều