Dò tìm theo 2 điều kiện

Liên hệ QC

castanea

Thành viên chính thức
Tham gia
28/4/09
Bài viết
55
Được thích
1
Mình đang cần làm 1 hàm tra theo hai điều kiện mà bị bí :) các bạn giúp mình voi nhé
Nội dung là:
-có 3 cột dữ liệu ở bảng tra là dữ liệu 1, dữ liệu 2, dữ liệu 3 và dựa
-Bang kết quả đã cho trước 2 dữ liệu, và tìm dữ liệu còn lại theo bảng tra và 2 dữ liệu đã cho
Thank all ^_^!
 

File đính kèm

Mình đang cần làm 1 hàm tra theo hai điều kiện mà bị bí :) các bạn giúp mình voi nhé
Nội dung là:
-có 3 cột dữ liệu ở bảng tra là dữ liệu 1, dữ liệu 2, dữ liệu 3 và dựa
-Bang kết quả đã cho trước 2 dữ liệu, và tìm dữ liệu còn lại theo bảng tra và 2 dữ liệu đã cho
Thank all ^_^!
Gõ công thức này vào cell C3:
PHP:
=LOOKUP(2,1/(($H$4:$H$15=A3)*($I$4:$I$15=B3)),$J$4:$J$15)
 
Môt cách khác dùng công thức mảng :
Mã:
=INDEX($J$4:$J$15,MATCH(1,($H$4:$H$15=$A3)*($I$4:$I$15=$B3),0))
Kết thúc bằng Ctrl-Shift-Enter
 
Mình đang cần làm 1 hàm tra theo hai điều kiện mà bị bí :) các bạn giúp mình voi nhé
Nội dung là:
-có 3 cột dữ liệu ở bảng tra là dữ liệu 1, dữ liệu 2, dữ liệu 3 và dựa
-Bang kết quả đã cho trước 2 dữ liệu, và tìm dữ liệu còn lại theo bảng tra và 2 dữ liệu đã cho
Thank all ^_^!
Thử công thức này xem sao
=OFFSET($A$1,MATCH(A3,$H$4:$H$15,0)+MATCH(B3,$I$4:$I$15,0)+1,9)
 
Thank các bạn rất nhiều
 
Và cũng có thể như thế này nữa chứ :
PHP:
=INDEX($J$4:$J$15;MATCH(A3&B3;$H$4:$H$15&$I$4:$I$15;0))
Trông lạ mà quen!
 
Vấn đề nữa cần sự giúp sức của các huynh

Mình đang làm file mà bi vướn 1 vấn đề như thế này:
- Ở bảng dữ liệu có 3 cột và mình cần xuất giá tri min và max của cột thứ 3 ở bảng dữ liệu dựa vào cột thứ nhất và thứ 2 của bảng dữ liệu
Thank all ^_^
 

File đính kèm

Min, I2: =MIN(IF(($A$2:$A$24=G2)*($B$2:$B$24=H2)>0,$C$2:$C$24)) Ctrl+Shift+Enter.
Max, I3: =MAX(IF(($A$2:$A$24=G3)*($B$2:$B$24=H3)>0,$C$2:$C$24)) Ctrl+Shift+Enter.
 
Cần gì phải hàm mảng nhỉ:
Mã:
=MIN((A2:A24=G2)*(B2:B24=H2)*C2:C24)
Thử chắc ăn chưa vậy?
Nếu biểu diễn theo kiểu này thì cùng lắm chỉ đúng khi tính MAX, còn tính MIN sẽ sai tét tè lè
Mặc khác: Nó cũng là mảng chứ có khác gì mấy hàm ở bài trên đâu
 
Thử chắc ăn chưa vậy?
Nếu biểu diễn theo kiểu này thì cùng lắm chỉ đúng khi tính MAX, còn tính MIN sẽ sai tét tè lè
Mặc khác: Nó cũng là mảng chứ có khác gì mấy hàm ở bài trên đâu
Em thử rồi, MAX hay MIN đều đúng.
Chỉ cần ENTER là đủ.
 
Em thử rồi, MAX hay MIN đều đúng.
Chỉ cần ENTER là đủ.
Khỏi cần thử, chỉ nhìn vào công thức và suy luận logic thôi đã thấy sai... Vậy mà bạn lại nói MAX, MIN đều đúng --> Chẳng hiểu bạn thử cách gì

untitled.JPG


Đừng nói là ENTER, dù Ctrl + Shift + Enter cũng sai luôn
Cái vụ tìm MIN có điều kiện đã nói mấy chục lần trên diễn đàn rồi còn gì
 

File đính kèm

mình thử công thức của bebo sao kq bằng 0 nhỉ ?
Kết quả =0 là đương nhiên rồi ---> Và đó là KẾT QUẢ SAI
Ngay cả với MAX nếu dùng theo kiểu MAX((Vùng 1 =dk1)*(Vùng 2 = dk2)*(Vùng KQ)) cũng có thể cho kết quả sai luôn nếu vùng kết quả có giá trị toàn là số âm
Nguyên tắc chung để tìm MAX, MIN theo điều kiện
MIN(IF((Vùng 1 =dk1)*(Vùng 2 = dk2),Vùng KQ))
MAX(IF((Vùng 1 =dk1)*(Vùng 2 = dk2),Vùng KQ))
 
kết quả =0 là đương nhiên rồi ---> và đó là kết quả sai
ngay cả với max nếu dùng theo kiểu max((vùng 1 =dk1)*(vùng 2 = dk2)*(vùng kq)) cũng có thể cho kết quả sai luôn nếu vùng kết quả có giá trị toàn là số âm
nguyên tắc chung để tìm max, min theo điều kiện
min(if((vùng 1 =dk1)*(vùng 2 = dk2),vùng kq))
max(if((vùng 1 =dk1)*(vùng 2 = dk2),vùng kq))
như vậy công thức của leonguyenz
=min(if(($a$2:$a$24=g2)*($b$2:$b$24=h2)>0,$c$2:$c$ 24))
chỉ cần
=min(if(($a$2:$a$24=g2)*($b$2:$b$24=h2),$c$2:$c$ 24))
hoặc dùng hàm small
=small(if((a2:a24=g2)*(b2:b24=h2),c2:c24),1)
 
Em mới học VBA, nên viết Code chưa được gọn, em xin góp 1 phương án

PHP:
Sub Dotim()
    Dim DL1(), DL2(), KQ(), i As Long, j As Long
    With Sheet1
        DL1 = .Range(.[A3], .[B65536].End(xlUp)).Value
        DL2 = .Range(.[H4], .[J65536].End(xlUp)).Value
        ReDim KQ(1 To UBound(DL1, 1), 1 To 1)
        .Range("C3:C1000").ClearContents
        For i = 1 To UBound(DL1, 1)
            For j = 1 To UBound(DL2, 1)
                If DL2(j, 1) = DL1(i, 1) And DL2(j, 2) = DL1(i, 2) Then
                    kk = kk + 1
                    KQ(kk, 1) = DL2(j, 3)
                End If
            Next j
        Next i
        .[C3].Resize(kk).Value = KQ
    End With
End Sub


Rất mong các anh, chị tư vấn cho em các cách làm VBA khác để em học thêm ah.
 
Em mới học VBA, nên viết Code chưa được gọn, em xin góp 1 phương án

PHP:
Sub Dotim()
    Dim DL1(), DL2(), KQ(), i As Long, j As Long
    With Sheet1
        DL1 = .Range(.[A3], .[B65536].End(xlUp)).Value
        DL2 = .Range(.[H4], .[J65536].End(xlUp)).Value
        ReDim KQ(1 To UBound(DL1, 1), 1 To 1)
        .Range("C3:C1000").ClearContents
        For i = 1 To UBound(DL1, 1)
            For j = 1 To UBound(DL2, 1)
                If DL2(j, 1) = DL1(i, 1) And DL2(j, 2) = DL1(i, 2) Then
                    kk = kk + 1
                    KQ(kk, 1) = DL2(j, 3)
                End If
            Next j
        Next i
        .[C3].Resize(kk).Value = KQ
    End With
End Sub


Rất mong các anh, chị tư vấn cho em các cách làm VBA khác để em học thêm ah.
Vậy được rồi nhưng thiếu bẫy lỗi! Các lỗi có thể xảy ra như sau:
- Cột B hoặc cột J chẳng có tí dữ liệu nào (nên End(xlUp) trật lất)
- Vùng dữ liệu có thể chứa cell rổng (khi so sánh DL2(j, 1) = DL1(i, 1) And DL2(j, 2) = DL1(i, 2) sẽ cho kết quả =TRUE)
- Không tìm thấy dữ liệu hợp điều kiện thì kk = 0, dẫn đến .[C3].Resize(kk).Value = KQ bị lỗi
-----------------
Ngoài ra, theo code của bạn thì có vẻ như bài toàn này là kiểm tra sự tồn tại của 1 list trong 1 list khác ----> Cái này dùng Dictionary mới hiểu quả
 
Vậy được rồi nhưng thiếu bẫy lỗi! Các lỗi có thể xảy ra như sau:
- Cột B hoặc cột J chẳng có tí dữ liệu nào (nên End(xlUp) trật lất)
- Vùng dữ liệu có thể chứa cell rổng (khi so sánh DL2(j, 1) = DL1(i, 1) And DL2(j, 2) = DL1(i, 2) sẽ cho kết quả =TRUE)
- Không tìm thấy dữ liệu hợp điều kiện thì kk = 0, dẫn đến .[C3].Resize(kk).Value = KQ bị lỗi
-----------------
Ngoài ra, theo code của bạn thì có vẻ như bài toàn này là kiểm tra sự tồn tại của 1 list trong 1 list khác ----> Cái này dùng Dictionary mới hiểu quả
1. Nếu sửa code của bạn Khanhhoan thì sửa thế nào để khắc phục lỗi mà bác nêu ra vậy ạ?
2. dùng Dictionary hiệu quả hơn thì dùng thế nào vậy bác NDU96081631?

Em đang gặp vấn đề giống với yêu cầu của bài này, chỉ khác là em cần MaxIf ở sheet khác.
Em thấy trên mạng có hướng dẫn tạo hàm FindTwoCondition song nếu dùng hàm gõ trực tiếp vào trong Sheet với dữ liệu của sheets nhiều sẽ có hiện tượng dung lượng file lớn và file xử lý chậm (theo quan sát của em khi nhập các công thức và hàm vào sheet, workbook có nhiều dòng, nhiều dữ liệu)
 
Lần chỉnh sửa cuối:
Gõ công thức này vào cell C3:
PHP:
=LOOKUP(2,1/(($H$4:$H$15=A3)*($I$4:$I$15=B3)),$J$4:$J$15)

Bác ndu có thể giải thích giùm em công thức của bác được không ah?
+ "2," có nghĩa là gì?
+ "1/(($H$4:$H$15=A3)*($I$4:$I$15=B3))" có nghĩa là sao ah?

Cám ơn bác nhiều
 
Web KT

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

Back
Top Bottom