Tạo marco lọc dữ liệu theo điều kiện

Liên hệ QC

GTK-PM

Thành viên thường trực
Tham gia
10/11/13
Bài viết
313
Được thích
15
Mình xin nhờ các bạn giúp đỡ!
Các bạn giúp đỡ mình lọc theo điều kiện như ở file thẻ kho bên dưới.
Ví dụ: Khi mình lọc dữ liệu: Xi măng thì bên cột nhập sẽ có kết quả nếu list data có, và tương tự bên cột xuất nếu có ở bên list data.
Cảm ơn các bạn rất nhiều, hy vọng sớm nhận được hồi âm từ các bạn.
 

File đính kèm

  • TheKho.xls
    78.5 KB · Đọc: 165
Mình xin nhờ các bạn giúp đỡ!
Các bạn giúp đỡ mình lọc theo điều kiện như ở file thẻ kho bên dưới.
Ví dụ: Khi mình lọc dữ liệu: Xi măng thì bên cột nhập sẽ có kết quả nếu list data có, và tương tự bên cột xuất nếu có ở bên list data.
Cảm ơn các bạn rất nhiều, hy vọng sớm nhận được hồi âm từ các bạn.
Tôi thấy code trong file đáp ứng yêu cầu của bạn rồi mà bạn còn muốn giúp đỡ về cái gì nữa?
 
Đây là file mình copy trên mạng về, bây giờ mình mong muốn được chỉ dẫn cách làm mà bạn
 
Đây là file mình copy trên mạng về, bây giờ mình mong muốn được chỉ dẫn cách làm mà bạn
Đó là tại bạn không nói rõ từ đầu chứ bộ, trong bài #1 đâu thấy bạn đề cập gì đến việc hướng dẫn cách làm đâu.
Vậy bạn đọc code trong file, bạn có hiểu nó đã làm những gì không?
 
Mình không hiểu bạn ơi, vậy nên mình đang cần sự giúp đỡ mà. Thế nên mình với mò vào diễn đàn tìm những người nhiệt tình như bạn để học hỏi.
Bạn chỉ mình cách tạo marco lọc hoặc hướng dẫn mình lọc theo điều kiện trong lọc nâng cao ( Advanced Filter ) để lọc theo điều kiện và trả về đúng cột nhập - cột xuất
 
Mình xin nhờ các bạn giúp đỡ!
Các bạn giúp đỡ mình lọc theo điều kiện như ở file thẻ kho bên dưới.
Ví dụ: Khi mình lọc dữ liệu: Xi măng thì bên cột nhập sẽ có kết quả nếu list data có, và tương tự bên cột xuất nếu có ở bên list data.
Cảm ơn các bạn rất nhiều, hy vọng sớm nhận được hồi âm từ các bạn.
file bạn đưa ra đáp ứng đúng yêu cầu rồi, còn nếu không hiểu chỗ nào cứ lên search chỗ ấy rồi ngẫm từ từ sẽ ra chứ diễn giải cách làm chắc cũng phải vài trang giấy A4
 
file bạn đưa ra đáp ứng đúng yêu cầu rồi, còn nếu không hiểu chỗ nào cứ lên search chỗ ấy rồi ngẫm từ từ sẽ ra chứ diễn giải cách làm chắc cũng phải vài trang giấy A4
Mình biết tạo marco rồi xin bạn hướng dẫn cách lọc nâng cao để lọc từ list data theo yêu cầu và trả về đúng cột mà mình cần
 
Mình không hiểu bạn ơi, vậy nên mình đang cần sự giúp đỡ mà. Thế nên mình với mò vào diễn đàn tìm những người nhiệt tình như bạn để học hỏi.
Bạn chỉ mình cách tạo marco lọc hoặc hướng dẫn mình lọc theo điều kiện trong lọc nâng cao ( Advanced Filter ) để lọc theo điều kiện và trả về đúng cột nhập - cột xuất
Tôi ghi chú từng câu lệnh trong code để bạn từ từ ngâm cứu nhé:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [F2]) Is Nothing Then 'Nếu ô thay đổi là ô F2 thì làm việc
Dim Sh As Worksheet, Rng As Range, sRng As Range 'Khai báo biến
Dim MyAdd As String 'Khai báo biến

Set Sh = ThisWorkbook.Worksheets("NhatKy") 'Đặt cho biến Sh là sheet NhatKy (mục đích cho gọn dòng lệnh số 8)
[b8].Resize(13, 5).ClearContents 'Xóa dữ liệu vùng chứa kết quả
Set Rng = Sh.Range(Sh.[F6], Sh.[F6].End(xlDown)) 'Thiết lập biến Rng là vùng dữ liệu nguồn
Set sRng = Rng.Find(Target.Offset(1).Value, , xlValues, xlWhole) 'Tìm mã hàng (ô F3) trong vùng Rng và gán cho biến sRng
If Not sRng Is Nothing Then 'Nếu tìm thấy mã hàng thì làm các lệnh tiếp theo
MyAdd = sRng.Address 'Gán địa chỉ sRng cho biến MyAdd, mục đích cho biết đây là ô đầu tiên tìm thấy
Do 'Làm những việc sau
With [B21].End(xlUp).Offset(1) 'Câu lệnh With này nhằm làm việc với ô trống đầu tiên trong vùng chứa kết quả
.Value = sRng.Offset(, -4).Value 'Gán số chứng từ
.Offset(, 1).Value = sRng.Offset(, -2).Value 'Gán ngày NX'
.Offset(, 2).Value = sRng.Offset(, 2).Value 'Gán ĐVT'
If sRng.Offset(, -3).Value = "N" Then 'Nếu loại chứng từ là Nhập thì...
.Offset(, 3).Value = sRng.Offset(, 1).Value 'Gán cột Số lượng cho cột Nhập
Else 'Ngược lại (loại chứng từ là Xuất)
.Offset(, 4).Value = sRng.Offset(, 1).Value 'Gán cột Số lượng cho cột Xuất
End If 'Hết kiểm tra loại chứng từ
End With 'Làm việc xong với hàng dữ liệu mới nhập
Set sRng = Rng.FindNext(sRng) 'Tìm ô tiếp theo chứa mã hàng tại ô F3 và gán cho biến sRng
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd 'Lặp cho đến khi không tìm thấy nữa hoặc sRng là ô đầu tiên tìm thấy
Else 'Ngược lại (không tìm thấy mã hàng)...
MsgBox "Nothing" '... thì xuất hiện hộp thoại thông báo.
End If
End If
End Sub[/GPECODE]
 
Bạn có thể giúp mình từng bước tạo được cái code như vậy bằng Advanced Filter không ?
 
Bạn có thể giúp mình từng bước tạo được cái code như vậy bằng Advanced Filter không ?
Bài này nếu dùng Advanced Filter để giải quyết thì cần phải thỏa mãn một số yêu cầu:
- Tiêu đề bảng dữ liệu nguồn và tiêu đề của bảng Thẻ kho phải hoàn toàn giống nhau đối với các cột tương ứng, chẳng hạn cột D sheet NhatKy (Ngày NX) và cột C sheet TheKho phải có tiêu đề trùng khớp.
- Cột Số lượng trên sheet NhatKy phải được tách thành 2 côt Nhập, Xuất (có thể sử dụng cột phụ). Tuy nhiên, việc sử dụng thêm 2 cột phụ chứa công thức sẽ làm cho file nặng nề khi dữ liệu lớn.
Do đó, với bài này, tôi nghĩ rằng hướng xử lý bằng phương thức Find như trong file trên là ổn.
Thêm một hướng khác là sử dụng mảng để giải quyết vấn đề. Không biết liệu bạn có muốn đi theo hướng này không?
 
Bạn chỉ tôi phương thức để find để lọc đc k. Tôi thấy bạn nói như trên là rất oke
 
Bạn chỉ tôi phương thức để find để lọc đc k. Tôi thấy bạn nói như trên là rất oke
Phương thức Find thì đã có ngay trong file bạn đính kèm đấy thôi, và tôi đã chú thích rất chi tiết từng câu lệnh ở bài trước rồi, bạn cứ từ từ ngâm cứu, từ từ sẽ ngấm thôi.
 
Tôi chưa ngâm đc code đâu bạn à, bạn cứ chỉ tôi find trên menu đi
 
Tôi chưa ngâm đc code đâu bạn à, bạn cứ chỉ tôi find trên menu đi
Tôi không hiểu "find trên menu" là cái gì, nhưng mà trong code trên tôi đã chú thích có 2 câu lệnh liên quan đến Find:
Mã:
Set sRng = Rng.Find(Target.Offset(1).Value, , xlValues, xlWhole)
và:
Mã:
Set sRng = Rng.FindNext(sRng)
Bạn nhấn Ctrl+F để mở hộp thoại Find and Replace cho dễ hình dung:
Trong câu lệnh thứ nhất:
- Rng là vùng dữ liệu nguồn
- Target.Offset(1).Value là giá trị cần tìm, tương ứng với mục Find what trên hộp thoại.
- xlValues cho biết tìm ở đâu (giá trị hay công thức, ở đây là giá trị), tương ứng với mục Look in trên hộp thoại.
- xlWhole cho biết tìm chuỗi con hay toàn bộ giá trị ô, ở đây là tìm toàn bộ, tương ứng với dấu check Match entire cell contents trên hộp thoại.
Ở đây, kết quả của phương thức Find là một ô (nếu tìm thấy), và nó có thể gán cho một biến kiểu Range, vậy mới có câu lệnh Set sRng = ...

Còn câu lệnh thứ 2 thì tương ứng với nút lệnh Find Next trên hộp thoại.

Tổng kết lại: Thuật toán đã sử dụng trong file là: Tìm mã hàng tương ứng với tên hàng đã chọn, không thấy thì hiện hộp thoại báo không tìm thấy, ngược lại thì lấy dữ liệu tìm thấy gán qua sheet TheKho, sau khi gán xong thì tìm tiếp xem còn giá trị nào thỏa mãn nữa không... cho đến hết thì thôi.
 
Theo form tôi đã tạo được kích theo APV
nhờ các bạn giúp tìm kiếm thêm của MD được ko ạ
Tôi ko thể đính kèm file để gửi mong các bạn giúp tôi
Gmail: dinhvuongcp@gmail.com
 
Web KT
Back
Top Bottom