Tìm kiếm một giá trị thỏa mãn nhiều điều kiện

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,436
Nghề nghiệp
Bác sĩ
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

Trước tiên xin chia xẻ với các bạn bài báo được đăng trên PCWord
Ví dụ chúng ta có một bảng dữ liệu, yêu cầu đặt ra là tìm điểm toán của một học sinh trong danh sách theo 2 điều kiện giới tính và tên. Vậy ta phải làm thế nào đây?


Tôi sẽ giới thiệu với các bạn một hàm tự tạo để làm việc này.

Trước tiên, bạn vào menu Tools\Macro\Visual Basic Editor (Alt + F11). Tại cửa sổ Microsoft Visual Basic, vào menu Insert\Module và nhập đoạn mã sau vào module vừa tạo.


Function FindTwoCondition(Table As Range, Val1 As Variant, _

Val1Occrnce As Integer, Val2 As Variant, Val2Col As Integer, ResultCol As Integer)

'Tabel la bang du lieu

'Val1 Dieu kien thu nhat

'Val1Occrnce gia tri thu n cua dieu kien trong cot

'Val2 dieu kien thu hai

'Val2Col cot thu n cua dieu kien thu 2

'ResultCol cot thu n can tim



Dim i As Integer, iCount As Integer

Dim rCol As Range



For i = 1 To Table.Rows.Count

If Table.Cells(i, 1) = Val1 And _

Table.Cells(i, Val2Col) = Val2 Then

iCount = iCount + 1

End If



If iCount = Val1Occrnce Then

FindTwoCondition = Table.Cells(i, ResultCol)

Exit For

End If

Next i

End Function



Sau khi đã nhập xong đoạn mã trên, bạn quay trở lại màn hình làm việc Excel bằng cách ấn Alt+Q. Bây giờ ta có thể sử dụng hàm vừa tạo như những hàm mà Excel đã hỗ trợ. Ví dụ tôi cần tìm Điểm Toán của người có tên là "Sơn" và có giới tính là "Nữ".

Trước tiên tôi lập bảng điều kiện, tại ô I6 tôi nhập công thức sau:


=FindTwoCondition($B$4:$F$13,I4,1,I5,3,4)


Trong đó:


- $B$4:$F$13: Vùng dữ liệu

- I4: Tên cần tìm

- 1: Tìm tên Sơn đầu tiên

- I5: Giới tính cần tìm

- 3: Số thứ tự của cột Giới tính trong vùng dữ liệu

- 4: Số thứ tự của cột Điểm Toán trong vùng dữ liệu


Kết quả sẽ trả về là 7. Chú ý ở đây hàm không phân biệt chữ thường chữ hoa.

Lâm Quang Bình

Binhlq77@yahoo.co.uk

Trích từ : http://www.pcworld.com.vn
 
Lần chỉnh sửa cuối:
Thử hàm dưới đây
cú pháp: I3=timMax($A$3:$E$17,G3,H3)
Mã:
Option Explicit

Function timMax(DL_, dk1_, dk2_)
Dim DL, dk1, dk2
Dim rws, cls
Dim i, j, k, x, z
DL = DL_
dk1 = dk1_
dk2 = dk2_
rws = UBound(DL)
cls = UBound(DL, 2)
For j = cls To 1 Step -1
    If IsNumeric(DL(1, j)) = False Then
        x = j
        Exit For
    End If
Next j
If x <= 1 Then Exit Function
For i = 1 To rws
    k = 0
    For j = 1 To x
        If DL(i, j) = dk1 Or DL(i, j) = dk2 Then k = k + 1
        If k = 2 Then Exit For
    Next j
    If k = 2 Then
        For j = x + 1 To cls
            If z < DL(i, j) Then z = DL(i, j)
        Next j
    End If
Next i
timMax = z
End Function
Cám ơn bạn rất nhiều. Chúc bạn luôn dồi dào sức khỏe và thành công.
Nếu được có thể nhờ bạn chỉ điểm chỗ cột kết quả tách rời lấy max của cột nào mình chỉ định được không. như VD này mình muốn lấy max cột 5, hoặc cột 4 tùy trường hợp, nhưng nó vẫn đang đếm từ cột 4 đến 5 và lấy max của 2 cột này.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom