Nhờ giúp đỡ code VBA giải quyết các vấn đề lọc, tìm kiếm giá trị (vì sử dụng công thức bị chậm)

Liên hệ QC

kienphamiuh

Thành viên chính thức
Tham gia
8/12/18
Bài viết
66
Được thích
11
Chào anh chị ! em có file excel này nhờ anh chị viết giúp code , trong file excel em có ghi rõ các vấn đề nhờ anh chị giúp. anh chị nào viết chạy tốt sớm nhất rồi comment sđt để em hậu tạ ạ :)
-Ngoài ra em cũng mới biết VBA được 2 tháng , đang rất muốn học anh chị nào có lớp dạy hoặc biết chỗ nào dạy tốt chỉ giúp em ạ, em ở khu vực TP HCM, huyện Bình Chánh gần cuối đường Nguyễn Văn Linh ạ
 

File đính kèm

  • file gửi GPE.xlsx
    30.1 KB · Đọc: 19
Thực ra Oanh Thơ (OT) có đọc điều kiện 2 của bạn rồi nhưng chưa hiểu ý bạn, bạn viết

B6 và D6 và D6 của sheet nào vậy bạn, OT nghĩ rằng bạn nói đến sheet "KET QUA" nhưng trong Sheet này cột D có nhiều mã nhiều STT mà. sao lại lấy mỗi D6? và còn các dòng tiếp theo nữa.

Bạn nên cho kết quả minh họa, sau khi bấm nút điều kiện 2 xong thì kết quả nó hiển thi trên sheet "KET QUA" .
Với lại Ot nghĩ, tiêu đề bạn có đề cập"vì sử dụng công thức bị chậm" bạn nên giữ nguyên công thức để mọi người cùng xem vì sao nặng sau đó mới góp ý cho bạn giải pháp được chứ. Nếu dữ liệu nhiều bạn có thể xóa bớt để lại một ít để làm ví dụ chẳng hạn.
------------
OT không dám hứa là sẽ giúp được bạn cái nút điều kiện 2 ạ, chỉ là OT chưa hiểu nên xác nhận lại để các bạn khác cùng xem và giúp bạn.
Có thể bạn @snow25 cũng định giúp bạn nốt nhưng vó thể vì bạn ấy chưa hiểu cũng nên.
Do lỗi của mình D6 ở đây là cột D đó bạn , ý là B6 và cột D của sheet " KET QUA"
 
Upvote 0
Bạn có thể làm các cột còn lại bằng công thức hoặc nhập tay kết quả minh họa để OT hiểu thêm được không ạ?
Đợi mình tí nhé
Bài đã được tự động gộp:

Bạn có thể làm các cột còn lại bằng công thức hoặc nhập tay kết quả minh họa để OT hiểu thêm được không ạ?
- kết quả đây Oanh Thơ, ô ĐÃ CÓ SÁCH mình thường dùng hàmIF + SUMPRODUCT để so sánh 2 dữ liệu là (ô B6 của " KET QUA " = CỘT A CỦA" TANG VA BAN") và cột D của " KET QUA" = CỘT G của " TANG VA BAN" ) nếu đúng thì bằng Ô B6
- do file 2 sheet " DANH SACH TONG" VÀ " TANG VAN BAN " mỗi sheet có trên 4000 dòng nên sử dụng công thức chạy cũng mât 30s
111111.PNG
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể làm các cột còn lại bằng công thức hoặc nhập tay kết quả minh họa để OT hiểu thêm được không ạ?
nói tổng quát về điều kiện 2 là :
- mình muốn dò tim các học viên của điều kiện 1 , học viên nào đã có sách thì ra kết quả = ô B6 sheet " KET QUA ", học viên nào ko có sách thì bỏ trống
- đối với học viên có sách là sách đó được tặng hay mua vào ngày nào, cái này kiểu mình lấy ô cột D kết hợp B6 dò tim trong sheet "TANG VA BAN" rồi dò cột P và F để lấy dữ liệu qua sheet " KET QUA"
 
Upvote 0
Theo mình hiểu thì thế này:
Sau khi nhấn [F1] ta có 1 danh sách ở trang 'KetQua'; căn cứ vơ trường (cột có tên) là [MBL] & trường [Ho & Tên] đi tìm những dòng fù hợp tại trang 'Mua & Ban' để ghi tiếp vô các cột trên bảng danh sách ở 'KetQua'

5 ăn/5 thua; Thua húp mắm cáy; 'Ăn' thì no lời cảm ơn!
 
Upvote 0
Đợi mình tí nhé
Bài đã được tự động gộp:


- kết quả đây Oanh Thơ, ô ĐÃ CÓ SÁCH mình thường dùng hàmIF + SUMPRODUCT để so sánh 2 dữ liệu là (ô B6 của " KET QUA " = CỘT A CỦA" TANG VA BAN") và cột D của " KET QUA" = CỘT G của " TANG VA BAN" ) nếu đúng thì bằng Ô B6
- do file 2 sheet " DANH SACH TONG" VÀ " TANG VAN BAN " mỗi sheet có trên 4000 dòng nên sử dụng công thức chạy cũng mât 30s
View attachment 209254

Bạn thử đoạn sau cho nút điều kiện 2 nhé, một cách làm mà ai ai cũng hiểu :D

Mã:
Sub Macro2()
'
' Macro2 Macro
'

'
    Application.ScreenUpdating = False
    Dim i As Long
    Const nhieudong As Long = 5000
    With Sheets("KET QUA")
        i = .Range("D" & .Rows.Count).End(xlUp).Row
        .Range("J3:J" & i).Value = "=IF(INDEX('TANG VA BAN'!A$3:A$" & nhieudong & ",MATCH(D3,'TANG VA BAN'!G$3:G$" & nhieudong & ",0))=$B$6,$B$6,"""")"
        .Range("K3:K" & i).Value = "=IF(J3=$B$6,INDEX('TANG VA BAN'!P$3:P$" & nhieudong & ",MATCH(D3,'TANG VA BAN'!G$3:G$" & nhieudong & ",0)),"""")"
        .Range("L3:L" & i).Value = "=IF(J3=$B$6,INDEX('TANG VA BAN'!F$3:F$" & nhieudong & ",MATCH(D3,'TANG VA BAN'!G$3:G$" & nhieudong & ",0)),"""")"
        .Range("J3:L" & i).Value = .Range("J3:L" & i).Value
    End With
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Bạn thử đoạn sau cho nút điều kiện 2 nhé, một cách làm mà ai ai cũng hiểu :D

Mã:
Sub Macro2()
'
' Macro2 Macro
'

'
    Application.ScreenUpdating = False
    Dim i As Long
    Const nhieudong As Long = 5000
    With Sheets("KET QUA")
        i = .Range("D" & .Rows.Count).End(xlUp).Row
        .Range("J3:J" & i).Value = "=IF(INDEX('TANG VA BAN'!A$3:A$" & nhieudong & ",MATCH(D3,'TANG VA BAN'!G$3:G$" & nhieudong & ",0))=$B$6,$B$6,"""")"
        .Range("K3:K" & i).Value = "=IF(J3=$B$6,INDEX('TANG VA BAN'!P$3:P$" & nhieudong & ",MATCH(D3,'TANG VA BAN'!G$3:G$" & nhieudong & ",0)),"""")"
        .Range("L3:L" & i).Value = "=IF(J3=$B$6,INDEX('TANG VA BAN'!F$3:F$" & nhieudong & ",MATCH(D3,'TANG VA BAN'!G$3:G$" & nhieudong & ",0)),"""")"
        .Range("J3:L" & i).Value = .Range("J3:L" & i).Value
    End With
    Application.ScreenUpdating = True
End Sub
Oanh ơi coi lại nó bị sao nek fdsdsfds.PNG
Bài đã được tự động gộp:

Theo mình hiểu thì thế này:
Sau khi nhấn [F1] ta có 1 danh sách ở trang 'KetQua'; căn cứ vơ trường (cột có tên) là [MBL] & trường [Ho & Tên] đi tìm những dòng fù hợp tại trang 'Mua & Ban' để ghi tiếp vô các cột trên bảng danh sách ở 'KetQua'

5 ăn/5 thua; Thua húp mắm cáy; 'Ăn' thì no lời cảm ơn!
em nói là em làm ko có chuyển no lời cảm ơn
Bài đã được tự động gộp:

Theo mình hiểu thì thế này:
Sau khi nhấn [F1] ta có 1 danh sách ở trang 'KetQua'; căn cứ vơ trường (cột có tên) là [MBL] & trường [Ho & Tên] đi tìm những dòng fù hợp tại trang 'Mua & Ban' để ghi tiếp vô các cột trên bảng danh sách ở 'KetQua'

5 ăn/5 thua; Thua húp mắm cáy; 'Ăn' thì no lời cảm ơn!
- ko phải dựa vào MBL vs HO & TEN được đâu vì 1 học viên có thể mua nhiều loại sách khác nhau, vì thế mình phải Tìm theo Mã Sách bác ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử đoạn sau cho nút điều kiện 2 nhé, một cách làm mà ai ai cũng hiểu :D

Mã:
Sub Macro2()
'
' Macro2 Macro
'

'
    Application.ScreenUpdating = False
    Dim i As Long
    Const nhieudong As Long = 5000
    With Sheets("KET QUA")
        i = .Range("D" & .Rows.Count).End(xlUp).Row
        .Range("J3:J" & i).Value = "=IF(INDEX('TANG VA BAN'!A$3:A$" & nhieudong & ",MATCH(D3,'TANG VA BAN'!G$3:G$" & nhieudong & ",0))=$B$6,$B$6,"""")"
        .Range("K3:K" & i).Value = "=IF(J3=$B$6,INDEX('TANG VA BAN'!P$3:P$" & nhieudong & ",MATCH(D3,'TANG VA BAN'!G$3:G$" & nhieudong & ",0)),"""")"
        .Range("L3:L" & i).Value = "=IF(J3=$B$6,INDEX('TANG VA BAN'!F$3:F$" & nhieudong & ",MATCH(D3,'TANG VA BAN'!G$3:G$" & nhieudong & ",0)),"""")"
        .Range("J3:L" & i).Value = .Range("J3:L" & i).Value
    End With
    Application.ScreenUpdating = True
End Sub
Oanh Thơ nãy giờ mình gắn 2 code của bạn vào nút bấm đều không được, nhưng bạn gửi file thì nó lại chạy, không biết quá trình mình gắn code như thế này đúng không:
- Developer >> visual basic >> tạo Module ( 1 or 2 ) >> copy code bạn viết >> rồi tạo nút bấm ở Insert >> chick phải chọn Assign Macro >> chọn Macro ( 1 or 2 ) rồi bấm nút , ko biết có sai ko mà lần nào cũng chay không được
- Lưu ý: điều kiện 2, trong file " TANG VA BAN " 1 học viên sẽ có tên nhiều lần do mua nhiều MÃ SÁCH, vì thế mình phải kết hợp Mã Sách và CỘT STT để lấy " ghi chú " và " ngày "
 
Upvote 0
Oanh ơi coi lại nó bị sao nek View attachment 209257
Bài đã được tự động gộp:


em nói là em làm ko có chuyển no lời cảm ơn
Bài đã được tự động gộp:


- ko phải dựa vào MBL vs HO & TEN được đâu vì 1 học viên có thể mua nhiều loại sách khác nhau, vì thế mình phải Tìm theo Mã Sách bác ạ

nó hổng có sao đâu là vì:
- Cột J không có kết quả là do bạn chưa điền Mã sách vào ô B6,
- Lỗi "NA" là do sheet "TANG VA BAN" không có mã số(STT) không có mã 1786.
- Cột L bạn bôi đen cả cột định kích phải chuột formatcell định dạng "dd/mm/yyy" lại là được.
--------------
Oanh Thơ gửi bạn nốt nút số 3 và số 4 bạn kiểm tra kết quả nhé:
Chúc bạn ngủ ngon!
 

File đính kèm

  • file gửi GPE.xlsm
    43.8 KB · Đọc: 19
Upvote 0
nó hổng có sao đâu là vì:
- Cột J không có kết quả là do bạn chưa điền Mã sách vào ô B6,
- Lỗi "NA" là do sheet "TANG VA BAN" không có mã số(STT) không có mã 1786.
- Cột L bạn bôi đen cả cột định kích phải chuột formatcell định dạng "dd/mm/yyy" lại là được.
--------------
Oanh Thơ gửi bạn nốt nút số 3 và số 4 bạn kiểm tra kết quả nhé:
Chúc bạn ngủ ngon!
Oanh Thơ ơi mình tìm ra 1 lỗi

Lỗi 1: lỗi này ở code ĐK2 : lỗi này là mình vẫn dữ nguyên các ô điều kiên B3= FF1 , B4= 246/5:30pm , B5= Ms. Tuyền , mình chỉ thay Mã Sách: FF11 lọc ok (do ở các dòng đầu nên chưa trùng tên), FF12 lọc ok (do ở các dòng đầu nên chưa trùng tên), nhưng đến FF13 và FF14 là ko lọc được nữa, có khả năng là do bị trùng tên nên ko lọc được cột "ghi chú " và " ngày " . giống như nó chỉ lấy dữ liệu nó tìm thấy đầu tiên thôi ,còn các dữ liệu khác bị trung lặp là ko tính á

Ban lấy file này làm nha vì mình mới sửa các dữ liệu của sheet "TANG VA BAN" để thử có bị dính lỗi trùng lặp ko ,ai ngờ bị
Sửa xong nhớ gửi SĐT qua hộp thư mình nha, còn ko thì comment ở đây cũng được :)
 

File đính kèm

  • file gửi GPE.xlsm
    41.3 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
anh lỡ làm làm nốt nút xuất file và nút Reset luôn đi ạ, nút Reset chỉ cần xoá các ô từ D3:L3 xuống dòng cuối cùng là được, anh comment luôn sđt nha
Góp ý cho bạn:
Muốn người ta trợ giúp thì bạn phải nêu số điện thoại của bạn để thành viên nào có nhã ý giúp thì liên hệ, hà cớ gì lại kêu người ta cho số.
 
Upvote 0
dạ cảm ơn anh đã góp ý, để em nhắn tin số điện thoại cho mấy anh chị

@kienphamiuh ,bác @be09 góp ý đúng đó bạn viết luôn lên đây đi ạ, bạn nào có nhu cầu thì sẽ liên hệ với bạn.
OT ngại những tin nhắn đó lắm. OT chỉ cần "cỗ lòng" là đủ rồi. Nhưng xem chừng cũng không kiếm được rồi :D
 
Upvote 0
@kienphamiuh ,bác @be09 góp ý đúng đó bạn viết luôn lên đây đi ạ, bạn nào có nhu cầu thì sẽ liên hệ với bạn.
OT ngại những tin nhắn đó lắm. OT chỉ cần "cỗ lòng" là đủ rồi. Nhưng xem chừng cũng không kiếm được rồi :D
-Mình đã gửi số điện thoai mình cho Oanh Thơ và anh SA_DQ mọi người kết bạn qua Zalo nha nếu không muốn cho mình biết số điện thoại , viết trong comment mình không xác định được ai là người viết code cho mình để hậu tạ cho đúng, mình coi trọng chữ tín các anh chị không có gì phải ngại cả vì trong bài đăng mình cũng có nói rõ là có hậu tạ mà :) , cứ coi như đây là tấm lòng giúp mọi người có động lực để giúp đỡ nhiều bạn khác chưa biết đến VBA hoặc mới học viết như mình :)
- Anh @SA_DQ viết giúp em 2 nút còn lại nha
 
Upvote 0
-Mình đã gửi số điện thoai mình cho Oanh Thơ và anh SA_DQ mọi người kết bạn qua Zalo nha nếu không muốn cho mình biết số điện thoại , viết trong comment mình không xác định được ai là người viết code cho mình để hậu tạ cho đúng, mình coi trọng chữ tín các anh chị không có gì phải ngại cả vì trong bài đăng mình cũng có nói rõ là có hậu tạ mà :) , cứ coi như đây là tấm lòng giúp mọi người có động lực để giúp đỡ nhiều bạn khác chưa biết đến VBA hoặc mới học viết như mình :)
- Anh @SA_DQ viết giúp em 2 nút còn lại nha

Cảm ơn nhã ý của kienphamiuh, OT viết bài trên GPE chỉ duy nhất mục đích là học hỏi.Nên có gì bạn cứ thông tin trên GPE nhé, nếu trong khả năng kiến thức của OT thì OT sẽ giúp.
OT thấy bài #31 của bác @SA_DQ là đúng ý bạn rồi đó, nên OT không có góp ý thêm gì nữa.
 
Upvote 0
anh lỡ làm làm nốt nút xuất file và nút Reset luôn đi ạ, nút Reset chỉ cần xoá các ô từ D3:L3 xuống dòng cuối cùng là được, anh comment luôn sđt nha
Bài @29 OT đã giúp bạn rồi mà; Kiểm tra xem như thế nào;
Cái chuyện chép ra file khác (hay lấy dữ liệu từ file khác) mình rất không biết làm.

Anh cho em xin số điện thoại để hậu tạ code vừa rồi ạ

Đây là số điện thoại của em 0909 663 201 anh nhắn tin vào số này để em biết ạ

Mình viết cho ai đó 1 macro cũng chỉ là ủng hộ GPE.COM thôi;
Nếu bạn vẫn còn ý định gì đó thì liên lạc với câu lạc bộ thiện nguyện của GPE.COM Hà nội (do Thầy Hướng chủ xướng) để gởi gắm (Vì mình đoán là bạn đang cư ngụ thuộc các tỉnh fía Bắc.)
Số của mình HYEN17 đang giữ!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom