Code tìm kiếm cho điều kiện tìm Gộp

Liên hệ QC

Yeuvoyeucon

Thành viên hoạt động
Tham gia
30/10/09
Bài viết
143
Được thích
23
Kính gửi Anh Chị,
Bình thường làm em hay gặp bài toán kiểu này với mục tiêu tìm kiếm.
- Tại sheet Data em phải làm cột phụ Mã Hàng + Mã NV để làm vùng tìm kiếm cho hàm Vlookup
- Tại sheet GPE em muốn lọc Số lương bán theo điều kiện tìm kiếm là Mã Hàng + Mã NV em đã làm như File tại cột F.
Code gì có thể thay được khỏi phải làm cột phụ mà vẫn lọc được ra kết quả như tại cột F ạ.
 

File đính kèm

  • Code tim kiem voi dieu kien gop.xlsm
    14.4 KB · Đọc: 17
Kính gửi Anh Chị,
Bình thường làm em hay gặp bài toán kiểu này với mục tiêu tìm kiếm.
- Tại sheet Data em phải làm cột phụ Mã Hàng + Mã NV để làm vùng tìm kiếm cho hàm Vlookup
- Tại sheet GPE em muốn lọc Số lương bán theo điều kiện tìm kiếm là Mã Hàng + Mã NV em đã làm như File tại cột F.
Code gì có thể thay được khỏi phải làm cột phụ mà vẫn lọc được ra kết quả như tại cột F ạ.
Tôi thấy dùng SUMIFS là nhanh gọn nhất rồi.
Giải quyết luôn trường hợp 1 nhân viên, 1 mã hàng nhưng có nhiều dòng khác nhau.
Mã:
F2=SUMIFS(Data!$F$2:$F$24,Data!$B$2:$B$24,GPE!B2,Data!$E$2:$E$24,GPE!E2)
 
Upvote 0
Tôi thấy dùng SUMIFS là nhanh gọn nhất rồi.
Giải quyết luôn trường hợp 1 nhân viên, 1 mã hàng nhưng có nhiều dòng khác nhau.
Mã:
F2=SUMIFS(Data!$F$2:$F$24,Data!$B$2:$B$24,GPE!B2,Data!$E$2:$E$24,GPE!E2)
Các case em làm thì Nhân viên+ mã hàng này chỉ có một dòng bác ạ, em cũng làm ví dụ như vậy. Nhờ bác giúp code được thì tốt ạ.
 
Upvote 0
Kính gửi Anh Chị,
Bình thường làm em hay gặp bài toán kiểu này với mục tiêu tìm kiếm.
- Tại sheet Data em phải làm cột phụ Mã Hàng + Mã NV để làm vùng tìm kiếm cho hàm Vlookup
- Tại sheet GPE em muốn lọc Số lương bán theo điều kiện tìm kiếm là Mã Hàng + Mã NV em đã làm như File tại cột F.
Code gì có thể thay được khỏi phải làm cột phụ mà vẫn lọc được ra kết quả như tại cột F ạ.
Của bạn đây. Xóa bỏ Vùng F2: F1000 của Sh GPE hoặc thêm bớt dữ liệu vào các dòng của Sh GPE và nhấn nút xem điều gì xảy ra.
 

File đính kèm

  • Code tim kiem voi dieu kien gop.xlsm
    23.3 KB · Đọc: 15
Upvote 0
Upvote 0
Của bạn đây. Xóa bỏ Vùng F2: F1000 của Sh GPE hoặc thêm bớt dữ liệu vào các dòng của Sh GPE và nhấn nút xem điều gì xảy ra.
Giả sử mà Mã hàng CA, mã nhân viên NV1 bán thêm được hàng (thêm dòng nữa) => Code cho KQ không đúng, vì tôi nghĩ về mặt logic, chủ thớt đang dùng Vlookup là sai, phải áp dụng hàm như bài của @vanthinh3101 mới chuẩn
Bài đã được tự động gộp:

Chủ topic thử Code này
Mã:
Sub GPE_Hehehe()
Dim i&, Dic As Object, Data(), Itm, SLB(), GPE(), KQ()
Data = Range(Sheet1.[B1], Sheet1.[F1000].End(3))
ReDim SLB(1 To UBound(Data), 1 To 1)
GPE = Range(Sheet4.[B2], Sheet4.[E1000].End(3))
ReDim KQ(1 To UBound(GPE), 1 To 1)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Data)
    Itm = Data(i, 1) & Data(i, 4)
    If Not Dic.exists(Itm) Then
        k = k + 1
        Dic(Itm) = k
        SLB(k, 1) = Data(i, 5)
    Else
        SLB(Dic.Item(Itm), 1) = SLB(Dic.Item(Itm), 1) + Data(i, 5)
    End If
Next
For i = 1 To UBound(GPE)
    KQ(i, 1) = SLB(Dic.Item(GPE(i, 1) & GPE(i, 4)), 1)
Next
Sheet4.[F2].Resize(i - 1, 1) = KQ
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Giả sử mà Mã hàng CA, mã nhân viên NV1 bán thêm được hàng (thêm dòng nữa) => Code cho KQ không đúng
Vẫn đúng chứ anh. Trường hợp thêm mã hàng và mã nhân viên (thêm dòng nữa-dòng 1) như anh trích dẫn ở trên thì vẫn cho ra kết quả là 12. Tôi thử thêm cả hàng Chôm chôm nữa cũng đúng mà.
Nhưng có lẽ nên thêm hàm Trim nữa để loại khoảng trắng thừa do lỗi nhập vào để cho chắc ăn anh nhỉ. DK=UCase(Trim(Arr1(i, 1))) & "|" & UCase(Trim(Arr1(i, 4)))
DK= UCase(Trim(Arr2(i, 1))) & "|" & UCase(Trim(Arr2(i, 4)))
 
Upvote 0
Vẫn đúng chứ anh. Trường hợp thêm mã hàng và mã nhân viên (thêm dòng nữa-dòng 1) như anh trích dẫn ở trên thì vẫn cho ra kết quả là 12. Tôi thử thêm cả hàng Chôm chôm nữa cũng đúng mà.
Nhưng có lẽ nên thêm hàm Trim nữa để loại khoảng trắng thừa do lỗi nhập vào để cho chắc ăn anh nhỉ. DK=UCase(Trim(Arr1(i, 1))) & "|" & UCase(Trim(Arr1(i, 4)))
DK= UCase(Trim(Arr2(i, 1))) & "|" & UCase(Trim(Arr2(i, 4)))
Tại sao lại là 12, hiện tại họ bán được 12, ngày mai với mã này họ bán thêm được 10, thì phải là 22.
Tôi có thử thêm 1 dòng vào chạy code thì kết quả không đúng đó bạn
 
Upvote 0
Vẫn đúng chứ anh. Trường hợp thêm mã hàng và mã nhân viên (thêm dòng nữa-dòng 1) như anh trích dẫn ở trên thì vẫn cho ra kết quả là 12. Tôi thử thêm cả hàng Chôm chôm nữa cũng đúng mà.
Nhưng có lẽ nên thêm hàm Trim nữa để loại khoảng trắng thừa do lỗi nhập vào để cho chắc ăn anh nhỉ. DK=UCase(Trim(Arr1(i, 1))) & "|" & UCase(Trim(Arr1(i, 4)))
DK= UCase(Trim(Arr2(i, 1))) & "|" & UCase(Trim(Arr2(i, 4)))
Sheet Data tôi add thử thêm 2 dòng,
Sheet GPE tôi để kết quả code của bạn, của tôi và công thức của Thịnh.
Bạn thử xem sao nhé.
 

File đính kèm

  • Code tim kiem voi dieu kien gop.xlsm
    28.8 KB · Đọc: 4
Upvote 0
Tại sao lại là 12, hiện tại họ bán được 12, ngày mai với mã này họ bán thêm được 10, thì phải là 22.
Tôi có thử thêm 1 dòng vào chạy code thì kết quả không đúng đó bạn

Tôi thì hiểu là chủ topic này chỉ muốn lọc ra những bản ghi có Mã hàng và mã nhân viên liệt kê ở Sh GPE thôi, có nghĩa là cho dù có mã hàng&mã nhân viên trùng nhau thì cũng lấy bản ghi đó ra, chứ không phải là tổng hợp bán hàng theo Mã Hàng&mã NV theo kiểu cộng dồn.
Code của tôi chỉ lấy bản ghi đầu tiên tìm được do vậy nếu có bản ghi trùng Mã H & mã NV sẽ không lấy==> kết quả sai. Về mặt logic thì phải lấy theo kiểu tổng hợp cộng dồn mới là đúng
Cũng chưa thấy chủ Topic lên tiếng theo ý của đầu bài là thế nào, liệt kê các bản ghi thỏa mãn điều kiện, hay tổng hợp cộng dồn theo từng Mã H&Mã NV.
Cảm ơn anh đã chỉ ra điểm còn thiếu sót
Hy vọng là tiếp tục được anh quan tâm chỉ giáo thêm nữa.
Bài đã được tự động gộp:

Sheet Data tôi add thử thêm 2 dòng,
Sheet GPE tôi để kết quả code của bạn, của tôi và công thức của Thịnh.
Bạn thử xem sao nhé.
Đúng Code của anh chính xác.
 
Upvote 0
Tôi thì hiểu là chủ topic này chỉ muốn lọc ra những bản ghi có Mã hàng và mã nhân viên liệt kê ở Sh GPE thôi, có nghĩa là cho dù có mã hàng&mã nhân viên trùng nhau thì cũng lấy bản ghi đó ra, chứ không phải là tổng hợp bán hàng theo Mã Hàng&mã NV theo kiểu cộng dồn.
Code của tôi chỉ lấy bản ghi đầu tiên tìm được do vậy nếu có bản ghi trùng Mã H & mã NV sẽ không lấy==> kết quả sai. Về mặt logic thì phải lấy theo kiểu tổng hợp cộng dồn mới là đúng
Cũng chưa thấy chủ Topic lên tiếng theo ý của đầu bài là thế nào, liệt kê các bản ghi thỏa mãn điều kiện, hay tổng hợp cộng dồn theo từng Mã H&Mã NV.
Cảm ơn anh đã chỉ ra điểm còn thiếu sót
Hy vọng là tiếp tục được anh quan tâm chỉ giáo thêm nữa.
uhm,
Tôi cũng đoán mò thôi, có thể chủ thớt chưa đưa dữ liệu thật. Vì tôi thấy phần Sheet GPE của chủ thớt còn có cột "Ngày tháng", tôi đoán có thể là sẽ tổng theo ngày tháng, mã hàng, mã NV.
 
Upvote 0
uhm,
Tôi cũng đoán mò thôi, có thể chủ thớt chưa đưa dữ liệu thật. Vì tôi thấy phần Sheet GPE của chủ thớt còn có cột "Ngày tháng", tôi đoán có thể là sẽ tổng theo ngày tháng, mã hàng, mã NV.
Anh gắn bó nhiều năm với diễn đàn anh có thấy hiện tượng là các thành viên đăng bài nhờ giúp nhưng có rất rất nhiều bài
1/ Không nói rõ ý định (kết quả mong muốn)
2/ Không đính kèm file- hoặc có đính kèm thì đó là file PJG (ảnh chụp màn hình) -hoặc File có pass file pass VbE...
thậm chí tôi thấy có bài đến 17#,18# yêu cầu gửi file giả định lên cũng chưa gửi được. Khi Up lên thì dữ liệu không chuẩn, được yêu cầu sửa theo gợi ý để tiện cho làm việc khoa học, dễ tổng hợp, báo cáo phân tích thì nêu nên 1 loạt lý do (do mẫu của trên quy định, của phần mềm xuất ra, nhìn quen và làm quen thế rồi...và rồi nhờ thiết kế Sheetform luôn...)
3/ Yêu cầu nhỏ giọt - giúp được vấn đề này lại đẻ són ra vấn đề khác, cứ thế, cứ thế....
Người giúp cứ thế là vừa làm giúp vừa đoán mò yêu cầu của họ, nhiều anh chị Cao thủ trên diễn đàn có nhiều kinh nghiêm còn làm code cho họ theo kiểu đón đầu nữa chứ. Song rồi thì sao, được hay chưa được cũng không phản hồi (không muốn nói là quên cả cảm ơn người đã giúp)..v.v
4/ Một số thành viên (chủ yếu là thành viên mới) thì đăng bài phạm quy, yêu cầu không viết tắt, không sử dụng tiếng lóng, tiếng Tây bồi... nhưng vẫn không sửa, thậm chí có cả thành viên đòi đuổi thành viên BQT; rồi chê nọ chê kia, quấy rối lung tung, thái độ không nghiêm túc có phần không tôn trọng..
Tôi gần đây ở nhà chống dịch mới thường xuyên vào diễn đàn để học hỏi thêm, tôi thấy có hiện tượng như vậy, Không biết anh có thấy thế không?
 
Upvote 0
Anh gắn bó nhiều năm với diễn đàn anh có thấy hiện tượng là các thành viên đăng bài nhờ giúp nhưng có rất rất nhiều bài
1/ Không nói rõ ý định (kết quả mong muốn)
2/ Không đính kèm file- hoặc có đính kèm thì đó là file PJG (ảnh chụp màn hình) -hoặc File có pass file pass VbE...
thậm chí tôi thấy có bài đến 17#,18# yêu cầu gửi file giả định lên cũng chưa gửi được. Khi Up lên thì dữ liệu không chuẩn, được yêu cầu sửa theo gợi ý để tiện cho làm việc khoa học, dễ tổng hợp, báo cáo phân tích thì nêu nên 1 loạt lý do (do mẫu của trên quy định, của phần mềm xuất ra, nhìn quen và làm quen thế rồi...và rồi nhờ thiết kế Sheetform luôn...)
3/ Yêu cầu nhỏ giọt - giúp được vấn đề này lại đẻ són ra vấn đề khác, cứ thế, cứ thế....
Người giúp cứ thế là vừa làm giúp vừa đoán mò yêu cầu của họ, nhiều anh chị Cao thủ trên diễn đàn có nhiều kinh nghiêm còn làm code cho họ theo kiểu đón đầu nữa chứ. Song rồi thì sao, được hay chưa được cũng không phản hồi (không muốn nói là quên cả cảm ơn người đã giúp)..v.v
4/ Một số thành viên (chủ yếu là thành viên mới) thì đăng bài phạm quy, yêu cầu không viết tắt, không sử dụng tiếng lóng, tiếng Tây bồi... nhưng vẫn không sửa, thậm chí có cả thành viên đòi đuổi thành viên BQT; rồi chê nọ chê kia, quấy rối lung tung, thái độ không nghiêm túc có phần không tôn trọng..
Tôi gần đây ở nhà chống dịch mới thường xuyên vào diễn đàn để học hỏi thêm, tôi thấy có hiện tượng như vậy, Không biết anh có thấy thế không?
Thôi cứ nghĩ tích cực, họ up đến đâu thì mình làm đến đó vậy bạn.
 
Upvote 0
Thôi cứ nghĩ tích cực, họ up đến đâu thì mình làm đến đó vậy bạn.
Tôi cũng có suy nghĩ như anh. Họ up đến đâu mình cố giúp họ đến đó, có điều là kiến thức và kinh nghiệm không nhiều nên cũng có bài giúp được, có bài chưa toàn mỹ cho lắm (còn sai về ý chủ thớt, còn sót về mặt thuật toán...). Thôi thì cứ giúp, giúp người là giúp mình, có sai, có sửa ==> có thêm kinh nghiệm.
 
Upvote 0
Tôi cũng có suy nghĩ như anh. Họ up đến đâu mình cố giúp họ đến đó, có điều là kiến thức và kinh nghiệm không nhiều nên cũng có bài giúp được, có bài chưa toàn mỹ cho lắm (còn sai về ý chủ thớt, còn sót về mặt thuật toán...). Thôi thì cứ giúp, giúp người là giúp mình, có sai, có sửa ==> có thêm kinh nghiệm.
Đến giờ cũng chưa biết code nào cho kết quả đúng đó bạn.
 
Upvote 0
Giả sử mà Mã hàng CA, mã nhân viên NV1 bán thêm được hàng (thêm dòng nữa) => Code cho KQ không đúng, vì tôi nghĩ về mặt logic, chủ thớt đang dùng Vlookup là sai, phải áp dụng hàm như bài của @vanthinh3101 mới chuẩn
Bài đã được tự động gộp:

Chủ topic thử Code này
Mã:
Sub GPE_Hehehe()
Dim i&, Dic As Object, Data(), Itm, SLB(), GPE(), KQ()
Data = Range(Sheet1.[B1], Sheet1.[F1000].End(3))
ReDim SLB(1 To UBound(Data), 1 To 1)
GPE = Range(Sheet4.[B2], Sheet4.[E1000].End(3))
ReDim KQ(1 To UBound(GPE), 1 To 1)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Data)
    Itm = Data(i, 1) & Data(i, 4)
    If Not Dic.exists(Itm) Then
        k = k + 1
        Dic(Itm) = k
        SLB(k, 1) = Data(i, 5)
    Else
        SLB(Dic.Item(Itm), 1) = SLB(Dic.Item(Itm), 1) + Data(i, 5)
    End If
Next
For i = 1 To UBound(GPE)
    KQ(i, 1) = SLB(Dic.Item(GPE(i, 1) & GPE(i, 4)), 1)
Next
Sheet4.[F2].Resize(i - 1, 1) = KQ
End Sub
Em cảm ơn anh đã trợ giúp ạ !!!
 
Upvote 0
Web KT
Back
Top Bottom