Đọc file csv và lọc dữ liệu (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

quangdiepctmbk

Thành viên hoạt động
Tham gia
2/4/08
Bài viết
169
Được thích
52
Nghề nghiệp
Ky su
Mình có file csv dạng
Date,Result,Serial
3/11,OK,11
3/12,OK,12
3/13,NG,13
3/14,NG,12
Yêu cầu : chỉ lọc những số Serial có Result là OK, nếu số Serial lặp lại trên 1 lần thì căn cứ vào Date(ngày gần nhất) và Result để lấy kết quả. Ví dụ như trên số Serial lặp 2 lần. Ngày gần nhất là 3/14 có Result là NG nên cũng không phù hợp => kết quả lọc của file csv trên là chỉ có 11 là phù hợp.
Nhờ các bạn viết macro giúp mình.
 
Mình có file csv dạng
Date,Result,Serial
3/11,OK,11
3/12,OK,12
3/13,NG,13
3/14,NG,12
Yêu cầu : chỉ lọc những số Serial có Result là OK, nếu số Serial lặp lại trên 1 lần thì căn cứ vào Date(ngày gần nhất) và Result để lấy kết quả. Ví dụ như trên số Serial lặp 2 lần. Ngày gần nhất là 3/14 có Result là NG nên cũng không phù hợp => kết quả lọc của file csv trên là chỉ có 11 là phù hợp.
Nhờ các bạn viết macro giúp mình.
1. "lọc những số Serial có Result là OK":
Filter cột [Result], điều kiện "OK".

2. Đoạn màu đỏ đã triệt tiêu đoạn màu xanh, nêu ra làm chi?

3. "nếu số Serial lặp lại trên 1 lần" mà có [Result] đều là "OK" thì tính sao?
 
Upvote 0
1. "lọc những số Serial có Result là OK":
Filter cột [Result], điều kiện "OK".

2. Đoạn màu đỏ đã triệt tiêu đoạn màu xanh, nêu ra làm chi?

3. "nếu số Serial lặp lại trên 1 lần" mà có [Result] đều là "OK" thì tính sao?

1.Mình muốn làm bằng macro cho nó nhanh và thao tác đơn giản.
2.Ý của mình là nếu như cùng một Serial nếu kiểm tra ngày 3/11 mà OK nhưng đến ngày 3/12 kiểm tra NG thì kết quả lọc sẽ không có Serial này=>tức là lấy kết quả kiểm tra(Result) của ngày gần nhất.
3.Nếu số Serial lặp lại trên 1 lần mà có Result đều là OK thì kết quả lọc sẽ có số Serial đó.
Mong bạn giúp đỡ
 
Upvote 0
1.Mình muốn làm bằng macro cho nó nhanh và thao tác đơn giản.
2.Ý của mình là nếu như cùng một Serial nếu kiểm tra ngày 3/11 mà OK nhưng đến ngày 3/12 kiểm tra NG thì kết quả lọc sẽ không có Serial này=>tức là lấy kết quả kiểm tra(Result) của ngày gần nhất.
3.Nếu số Serial lặp lại trên 1 lần mà có Result đều là OK thì kết quả lọc sẽ có số Serial đó.
Mong bạn giúp đỡ
Ý gì thì cũng cần có file mới làm được. Không có file thì mần kiểu gì giờ?
 
Upvote 0
Mở macro lên thâu:
- load file csv
- filter "OK"
- sort theo Serial, Date

Gởi cái macro đã thâu đó lên. Sẽ có người sửa giùm, và thêm chỗ còn lại.
 
Upvote 0
Code theo gợi ý của anh em có dạng như sau.
Nó dùng chính Excel mở nó ra rồi dùng luôn tính năng Filter của Excel để lọc luôn

Mã:
Sub GetData()
Dim NFile
Application.ScreenUpdating = False
Worksheets("Data").Columns(1).ClearContents
NFile = ThisWorkbook.Path & "\csv file.csv"
With Workbooks.Open(Filename:=NFile)
With .Sheets(1).Range("A1:C" & .Sheets(1).[A65000].End(3).Row)
.AutoFilter
.AutoFilter Field:=2, Criteria1:="=*'OK*"
 .Columns(3).SpecialCells(xlCellTypeVisible).Copy Worksheets("Data").[A1]
End With
.Close (False)
End With
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Code theo gợi ý của anh em có dạng như sau.
Nó dùng chính Excel mở nó ra rồi dùng luôn tính năng Filter của Excel để lọc luôn

Mã:
Sub GetData()
Dim NFile
Application.ScreenUpdating = False
Worksheets("Data").Columns(1).ClearContents
NFile = ThisWorkbook.Path & "\csv file.csv"
With Workbooks.Open(Filename:=NFile)
With .Sheets(1).Range("A1:C" & .Sheets(1).[A65000].End(3).Row)
.AutoFilter
.AutoFilter Field:=2, Criteria1:="=*'OK*"
 .Columns(3).SpecialCells(xlCellTypeVisible).Copy Worksheets("Data").[A1]
End With
.Close (False)
End With
Application.ScreenUpdating = True
End Sub
Nếu code như trên sẽ chỉ lọc những giá trị OK thôi.Đối với những số Serial lặp lại từ 2 lần trở lên thì căn cứ vào ngày Start Date chỉ lấy kết quả ngày gần nhất. Nếu kết quả ngày gần nhất là OK thì sẽ lọc ra số serial đó, nếu NG thì số serial đó sẽ không được lọc mặc dù những ngày trước đó là OK.
Thank các bạn!
 
Upvote 0
Mình đang rất cần, mong mọi người giúp đỡ
 
Upvote 0
Web KT

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

Back
Top Bottom