Lọc dữ liệu thiếu kết quả (1 người xem)

  • Thread starter Thread starter LYSM
  • Ngày gửi Ngày gửi

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

LYSM

Thành viên thường trực
Tham gia
16/3/11
Bài viết
290
Được thích
26
Chào các bác!
1, Hôm trước có nhờ bác Ba Tê viết code lọc dữ liệu theo mã số, do ý tưởng của em lúc đó chưa hoàn thiện nên em muốn nhờ các bác modify giúp em Sub "Kycuc" của bác Ba Tê theo ý tưởng sau:
Các mã ở cột A thuộc danh sách cột O mà thiếu chỉ tiêu ở cột N trong sheet "Du lieu vao" sẽ được tách ra cột "Kỳ Cục" (Cột P) của sheet "Thong bao" (cột Q "Kỳ Quái" đã hoàn thiện và em muốn dữ nguyên).

2, Ngoài ra, nếu được các bác modify nốt cho em Sub "GPE" như sau:
Các mã số sẽ được tách ra sheet "thong bao" khi chỉ tiêu trên cột N >cell N1 (VD N1 em để là 1000 chẳng hạn). Hiện tại Sub này đang tách các mã số có chỉ tiêu < các dòng từ B1 đến N1. (Em muốn tách các mã số có chỉ tiêu < các dòng từ B1 đến M1 và những mã số có chỉ tiêu > N1). Lưu ý sub này là vùng dữ liệu từ cột A-O bên sheet "Thong bao". Cột P và Q không liên quan ạ.
Nếu bác Ba Tê không thấy phiền mong bác giúp em lần nữa ạ. Em cảm ơn bác nhiều!

Kính nhờ các bác giúp em, vì thread trước của em cũng khá lâu nên em lập thread mới, em định PM cho bác Ba Tê nhưng sợ nhờ nhiều quá lại phiền bác ấy.
Cảm ơn các bác nhiều!
 
Lần chỉnh sửa cuối:
Sub "GPE" em đã modify được theo ý muốn, nhờ mọi người giúp em nốt Sub "Kycuc".
Em cảm ơn nhiều!
 
Các mã ở cột A thuộc danh sách cột O mà thiếu chỉ tiêu ở cột N trong sheet "Du lieu vao" sẽ được tách ra cột "Kỳ Cục" (Cột P) của sheet "Thong bao" (cột Q "Kỳ Quái" đã hoàn thiện và em muốn dữ nguyên).
Thiếu là sao? Thiếu so với cái gì? Ô trống có phải là thiếu không?
 
Lần chỉnh sửa cuối:
Đúng rồi bác ạ, những ô trống ở cột N mà có mã sô thuộc danh sách cột O ấy ạ (không tách các mã có đầu là MC, b.thuong, GUI)
Còn cái câu này là sao?
Các mã ở cột A thuộc danh sách cột O
Khác hoàn toàn lúc trước phải không?
Lúc trước là lấy mã trong cột O mà không có trong cột A, Bi giờ là lấy mã trong cột A và có trong cột O đông thời cột N là trống?
Diễn giải khó hiểu quá.
 
Còn cái câu này là sao?

Khác hoàn toàn lúc trước phải không?
Lúc trước là lấy mã trong cột O mà không có trong cột A, Bi giờ là lấy mã trong cột A và có trong cột O đông thời cột N là trống?
Diễn giải khó hiểu quá.
Dạ đúng rồi bác ạ, vì lúc trước thì sub "Ky quai" đã làm hoàn hảo rồi ạ.
 
Xem thử file này coi sao.
Cái này chưa ổn lắm bác ạ,
Thứ nhất em chỉ muốn lấy 5 ký tự đầu (không muốn lấy phần C24.04...)
Thứ 2 khi em xóa bớt các mã số ở cột O đi thì khi sang sheet "Thong bao" một số chỗ nó bị cách dòng, không liền mạch ạ
 
Lần chỉnh sửa cuối:
Trợ giúp 1 tay cho bac BaTe nào

Cái này chưa ổn lắm bác ạ,
Thứ nhất em chỉ muốn lấy 5 ký tự đầu (không muốn lấy phần C24.04...)
Thứ 2 khi em xóa bớt các mã số ở cột O đi thì khi sang sheet "Thong bao" một số chỗ nó bị cách dòng, không liền mạch ạ

code chỉnh sửa chút chút từ code trên của bác BaTe
Copy sub ky cuc nay vao thay cai kycuc cũ là được
[GPECODE=vb]
Public Sub KyCuc() '''chinh sua chut chut tu code bac BaTe
Dim Dic As Object, sArr(), dArr(), I As Long, K As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("du lieu vao")
sArr = .Range(.[O3], .[O65000].End(xlUp)).Value
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1)
If Tem <> "" And Not Dic.Exists(Tem) Then
Dic.Add Tem, ""
End If
Next I
sArr = .Range(.[A3], .[A65000].End(xlUp)).Resize(, 14).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
If Not UCase(sArr(I, 1)) Like "*GUI*" Then
Tem = Left(sArr(I, 1), 5)
If Tem <> "" And sArr(I, 14) = "" And Dic.Exists(Tem) Then
K = K + 1
dArr(K, 1) = Tem ''sArr(I, 1)
End If
End If
Next I
End With
With Sheets("Thong bao")
.[P10:P65000].ClearContents
If K Then .[P10].Resize(K).Value = dArr
End With
End Sub
[/GPECODE]

So với code cũ: Chỉ thêm Tem<>"" vào các dòng 8 và 17, và sửa dòng 19 (=Tem để lấy 5 ký tự đầu thui), sửa lại chút dòng 24-27 (thêm dòng 25)
 
Lần chỉnh sửa cuối:
code chỉnh sửa chút chút từ code trên của bác BaTe
Copy sub ky cuc nay vao thay cai kycuc cũ là được
[GPECODE=vb]
Public Sub KyCuc() '''chinh sua chut chut tu code bac BaTe
Dim Dic As Object, sArr(), dArr(), I As Long, K As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("du lieu vao")
sArr = .Range(.[O3], .[O65000].End(xlUp)).Value
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1)
If Tem <> "" And Not Dic.Exists(Tem) Then
Dic.Add Tem, ""
End If
Next I
sArr = .Range(.[A3], .[A65000].End(xlUp)).Resize(, 14).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
If Not UCase(sArr(I, 1)) Like "*GUI*" Then
Tem = Left(sArr(I, 1), 5)
If Tem <> "" And sArr(I, 14) = "" And Dic.Exists(Tem) Then
K = K + 1
dArr(K, 1) = Tem ''sArr(I, 1)
End If
End If
Next I
End With
With Sheets("Thong bao")
.[P10:P65000].ClearContents
If K Then .[P10].Resize(K).Value = dArr
End With
End Sub
[/GPECODE]

So với code cũ: Chỉ thêm Tem<>"" vào các dòng 8 và 17, sửa lại chút dòng 24-27 (thêm dòng 25)
Bác ơi, cái này cũng chưa ổn bác ạ, chẳng hạn mã LV018 có LV018 S30.04 và LV018 S24.04 thì LV018 S30.04 đã có kết quả ở cột N, như vậy đúng theo ý của em thì mã này sẽ không xuất hiện ở bảng Thong bao nữa, đằng này nó vẫn báo LV018 S24.04 chưa có kết quả ở cột N. (Chỉ cần xuất hiện 1 kết quả ở cột N thì sẽ không báo nữa ạ), các mã chỉ xuất hiện trên bảng Thong bao khi tất cả các lần xuất hiện đều không có số liệu ở cột N ạ
 
Lần chỉnh sửa cuối:
Cái này chưa ổn lắm bác ạ,
Thứ nhất em chỉ muốn lấy 5 ký tự đầu (không muốn lấy phần C24.04...)
Thứ 2 khi em xóa bớt các mã số ở cột O đi thì khi sang sheet "Thong bao" một số chỗ nó bị cách dòng, không liền mạch ạ
Biết trước là hỏi không rõ ràng.
2 cái "thứ nhất" và "thứ hai" là không nói rõ từ đầu.
 
Bác ơi, cái này cũng chưa ổn bác ạ, chẳng hạn mã LV018 có LV018 S30.04 và LV018 S24.04 thì LV018 S30.04 đã có kết quả ở cột N, như vậy đúng theo ý của em thì mã này sẽ không xuất hiện ở bảng Thong bao nữa, đằng này nó vẫn báo LV018 S24.04 chưa có kết quả ở cột N. (Chỉ cần xuất hiện 1 kết quả ở cột N thì sẽ không báo nữa ạ)

Không hiểu ý bạn sao?

Cột N là cột N của Sheet nào?

và bạn upfile bạn thử lên đây tôi sửa code trực tiếp cho chuẩn dữ liệu, - vì thuật toán tôi giữ nguyên code của bác BarTe chỉ thêm xử lý khoảng trắng ("") và lấy 5 ký tự đầu - nên bạn thắc mắc kiểu vu vơ này thì khó cho mọi người rùi

Nhớ nói rõ ràng khi nói về địa chỉ ô, cột, hàng phải thuộc sheet nào tên gì
 
Lần chỉnh sửa cuối:
xem qua thì thuật toán của bác BaTe và thêm phần bỏ "" thì là ,

Liệt kê tất cả các mã (chỉ lấy 5 ký tự đầu) của mã từ cột A của sheet "du lieu vao" thỏa mãn cả 3 điều kiện sau
- chứa đoạn chuỗi ký tự "Gui"
- Có mặt (xét 5 ký tự đầu) trong dữ liệu cột O của sheet "du lieu vao"
- Tại dòng tương ứng cột N sheet "du lieu vao" có giá trị là "" (trống)


Kết quả đặt vào cột P của Sheet "Thong bao"

--------------

xem có đúng cái bạn cần chưa???

và up file dữ liệu cuối cùng bạn thử thấy sai đâu???
 
Không hiểu ý bạn sao?

Cột N là cột N của Sheet nào?

và bạn upfile bạn thử lên đây tôi sửa code trực tiếp cho chuẩn dữ liệu, - vì thuật toán tôi giữ nguyên code của bác BarTe chỉ thêm xử lý khoảng trắng ("") và lấy 5 ký tự đầu - nên bạn thắc mắc kiểu vu vơ này thì khó cho mọi người rùi

Nhớ nói rõ ràng khi nói về địa chỉ ô, cột, hàng phải thuộc sheet nào tên gì
Vâng, ý em là tại sheet "Du lieu vao" là sheet nguồn, sheet "Thong bao" là sheet kết quả. Tại sheet "Du lieu vao" khi tất cả các lần xuất hiện của mã số ở cột A có 5 ký tự đầu giống với mã số cột O mà không có dữ liệu ở cột N thì sẽ được tách sang sheet Thong bao. Để đơn giản em up file lên đã bỏ bớt mã số. Em chỉ muốn nó tách mã TU005 ra thôi, các mã TU039, TU044 đã có 1 lần kết quả nên không tách
 
Lần chỉnh sửa cuối:
Vâng, ý em là tại sheet "Du lieu vao" là sheet nguồn, sheet "Thong bao" là sheet kết quả. Tại sheet "Du lieu vao" khi tất cả các lần xuất hiện của mã số ở cột A có 5 ký tự đầu giống với mã số cột O mà không có dữ liệu ở cột N thì sẽ được tách sang sheet Thong bao. Để đơn giản em up file lên đã bỏ bớt mã số. Em chỉ muốn nó tách mã TU005 ra thôi, các mã TU039, TU044 đã có 1 lần kết quả nên không tách

vậy có cần điều kiện 1 - như bài #14 nói trên
- chứa đoạn chuỗi ký tự "Gui"

này không???
 
xem qua thì thuật toán của bác BaTe và thêm phần bỏ "" thì là ,

Liệt kê tất cả các mã (chỉ lấy 5 ký tự đầu) của mã từ cột A của sheet "du lieu vao" thỏa mãn cả 3 điều kiện sau
- chứa đoạn chuỗi ký tự "Gui" -> không chứa chuỗi ký tự "gui"
- Có mặt (xét 5 ký tự đầu) trong dữ liệu cột O của sheet "du lieu vao" Cái này đúng
- Tại dòng tương ứng cột N sheet "du lieu vao" có giá trị là "" (trống) Cái này đúng
- Đồng thời các lần xuất hiện đều "" (trống) ở dòng tương ứng cột N sheet "du lieu vao". VD TU005 có 3 lần xuất hiện thì cả 3 lần tại cột N đều ""

Kết quả đặt vào cột P của Sheet "Thong bao"

--------------

xem có đúng cái bạn cần chưa???

và up file dữ liệu cuối cùng bạn thử thấy sai đâu???
chưa đúng bác ạ, bác xem phần em bôi đỏ ạ
 
Còn một vấn đề nữa là tại Sub "GPE" khi sheet "du lieu vao" tại cột C tất cả đều >2.7 và cột E tất cả đều > 7.5 (như file em gửi cho bác vodoi2x) khi chạy macro sẽ báo lỗi và nếu chỉ có 1 dòng kết quả kể cả thỏa mãn <2.7 hoặc <7.5 nó cũng báo lỗi. Các bác khắc phục giúp em với ạ
 
Lần chỉnh sửa cuối:
Ah Bac Bate đã loại ký tự "Gui" - tôi nhầm

cái này sao

- Đồng thời các lần xuất hiện đều "" (trống) ở dòng tương ứng cột N sheet "du lieu vao". VD TU005 có 3 lần xuất hiện thì cả 3 lần tại cột N đều ""

Nếu TU005 có 1 lần Trống và 2 lần không trống - thì có nhặt vào KQ không???
 
Ah Bac Bate đã loại ký tự "Gui" - tôi nhầm

cái này sao

- Đồng thời các lần xuất hiện đều "" (trống) ở dòng tương ứng cột N sheet "du lieu vao". VD TU005 có 3 lần xuất hiện thì cả 3 lần tại cột N đều ""

Nếu TU005 có 1 lần Trống và 2 lần không trống - thì có nhặt vào KQ không???
Nếu có 1 lần thì ko cần tách ra sheet "thong bao" bác ạ, phải là không có lần nào cơ
 
Lần chỉnh sửa cuối:
Bác ơi TU005 3 lần đều trống đấy ạ :) em đã bôi vàng cả 3 lần mà

Tôi đang nói ví dụ xảy ra trường hợp

Nếu TU005 có 1 lần ở cột N sheet DL Trống 2 lần ở cột N sheet DL không trống - thì có nhặt vào KQ không???

vì có 1 lần trống thì có nhặt lần đó vào không, vì tuy cả 3 chúng đều là TU005 nhưng đuôi nó khác nhau nên có thể xảy ra trường hợp đó

bạn trả lời thẳng vào câu hỏi trên để đỡ mất thời gian
 
tại sheet DL: như TU039 ở dòng 5,6 và 9 - thì chỉ có 2 dòng 5&9 là có N9 trống, còn dòng 6 lại KHÔNG TRỐNG (vậy là không đồng thời trống rùi) ==> có nhặt vào KQ không???
 
Lần chỉnh sửa cuối:
tại sheet DL: như TU039 ở dòng 5,6 và 9 - thì chỉ có 2 dòng 5&9 là có N9 trống, còn dòng 6 lại KHÔNG TRỐNG (vậy là không đồng thời trống rùi) ==> có nhặt vào KQ không???
không nhặt bác ạ, chỉ nhặt khi đồng thời trống thôi
 
Em post lại nội dung #19 để các bác sửa giúp em nữa: "Còn một vấn đề nữa là tại Sub "GPE" khi sheet "du lieu vao" tại cột C tất cả đều >2.7 và cột E tất cả đều > 7.5 (như file em gửi cho bác vodoi2x) khi chạy macro sẽ báo lỗi và nếu chỉ có 1 dòng kết quả kể cả thỏa mãn <2.7 hoặc <7.5 nó cũng báo lỗi. Các bác khắc phục giúp em với ạ
 
Còn một vấn đề nữa là tại Sub "GPE" khi sheet "du lieu vao" tại cột C tất cả đều >2.7 và cột E tất cả đều > 7.5 (như file em gửi cho bác vodoi2x) khi chạy macro sẽ báo lỗi. Các bác khắc phục giúp em với ạ
Bạn hiểu từ "truyền đạt" có ý nghĩa gì?
Chỉ có Thầy truyền đạt cho Trò, Cấp trên truyền đạt xuống cấp dưới .....
Dạ không cần bác ạ, chắc cái đó em truyền đạt nhầm cho bác Ba Tê
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn hiểu từ "truyền đạt" có ý nghĩa gì?
Chỉ có Thầy truyền đạt cho Trò, Cấp trên truyền đạt xuống cấp dưới .....
Em xin lỗi nếu có gì mạo phạm bác, thực sự em không có ý đó. Em đổi lại là em nói không rõ nghĩa
 
Lần chỉnh sửa cuối:
Bạn hiểu từ "truyền đạt" có ý nghĩa gì?
Chỉ có Thầy truyền đạt cho Trò, Cấp trên truyền đạt xuống cấp dưới .....
Bác ơi, nếu file này khi chỉ có 1 dòng kết quả sau khi chạy rồi chuyển sang sheet "Thong bao" nó sẽ báo lỗi. Rất xin lỗi vì đã mạo phạm bác, thực sự trong lòng em luôn coi bác là Thầy (đã có lần em nói rồi thì phải), mong bác bỏ quá cho.
 
Lần chỉnh sửa cuối:
Thử cái này cho kycuc xem sao,

lưu ý đã thỏa mãn các điều kiện

Liệt kê tất cả các mã (chỉ lấy 5 ký tự đầu) của mã từ cột A của sheet "du lieu vao" thỏa mãn cả 3 điều kiện sau
- KHÔNG chứa đoạn chuỗi ký tự "Gui" -
- Có mặt (xét 5 ký tự đầu) trong dữ liệu cột O của sheet "du lieu vao" -
- Đồng thời các lần xuất hiện đều "" (trống) ở dòng tương ứng cột N sheet "du lieu vao". VD TU005 có 3 lần xuất hiện thì cả 3 lần tại cột N đều "" chỉ cần 1 lần không trống là loại kết quả

[GPECODE=vb]
Public Sub KyCuc() '''chinh sua chut chut tu code bac BaTe
Dim Dic As Object, DicKQ As Object, sArr(), dArr(), i As Long, k As Long, Tem As String, tG
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("du lieu vao")
sArr = .Range(.[O3], .[O65000].End(xlUp)).Value
For i = 1 To UBound(sArr, 1)
Tem = sArr(i, 1)
If Tem <> "" And Not Dic.Exists(Tem) Then
Dic.Add Tem, ""
End If
Next i
sArr = .Range(.[A3], .[A65000].End(xlUp)).Resize(, 14).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
Set DicKQ = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(sArr, 1)
If Not UCase(sArr(i, 1)) Like "*GUI*" Then
Tem = Left(sArr(i, 1), 5)
If Tem <> "" And Dic.Exists(Tem) Then
If sArr(i, 14) = "" Then
If Not DicKQ.Exists(Tem) Then DicKQ.Add Tem, 0
Else ''sArr(I, 14) <> ""
If DicKQ.Exists(Tem) Then DicKQ.Item(Tem) = DicKQ.Item(Tem) + 1
End If
End If
End If
Next i
End With

k = 0
If DicKQ.Count > 0 Then
For Each tG In DicKQ.keys
If DicKQ.Item(tG) = 0 Then
k = k + 1
dArr(k, 1) = tG
End If
Next tG
End If

Set Dic = Nothing: Set DicKQ = Nothing
With Sheets("Thong bao")
.[P10:P65000].ClearContents
If k Then .[P10].Resize(k).Value = dArr
End With
End Sub
[/GPECODE]
 
Thử cái này cho kycuc xem sao,

lưu ý đã thỏa mãn các điều kiện

Liệt kê tất cả các mã (chỉ lấy 5 ký tự đầu) của mã từ cột A của sheet "du lieu vao" thỏa mãn cả 3 điều kiện sau
- KHÔNG chứa đoạn chuỗi ký tự "Gui" -
- Có mặt (xét 5 ký tự đầu) trong dữ liệu cột O của sheet "du lieu vao" -
- Đồng thời các lần xuất hiện đều "" (trống) ở dòng tương ứng cột N sheet "du lieu vao". VD TU005 có 3 lần xuất hiện thì cả 3 lần tại cột N đều "" chỉ cần 1 lần không trống là loại kết quả

[GPECODE=vb]
Public Sub KyCuc() '''chinh sua chut chut tu code bac BaTe
Dim Dic As Object, DicKQ As Object, sArr(), dArr(), i As Long, k As Long, Tem As String, tG
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("du lieu vao")
sArr = .Range(.[O3], .[O65000].End(xlUp)).Value
For i = 1 To UBound(sArr, 1)
Tem = sArr(i, 1)
If Tem <> "" And Not Dic.Exists(Tem) Then
Dic.Add Tem, ""
End If
Next i
sArr = .Range(.[A3], .[A65000].End(xlUp)).Resize(, 14).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
Set DicKQ = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(sArr, 1)
If Not UCase(sArr(i, 1)) Like "*GUI*" Then
Tem = Left(sArr(i, 1), 5)
If Tem <> "" And Dic.Exists(Tem) Then
If sArr(i, 14) = "" Then
If Not DicKQ.Exists(Tem) Then DicKQ.Add Tem, 0
Else ''sArr(I, 14) <> ""
If DicKQ.Exists(Tem) Then DicKQ.Item(Tem) = DicKQ.Item(Tem) + 1
End If
End If
End If
Next i
End With

k = 0
If DicKQ.Count > 0 Then
For Each tG In DicKQ.keys
If DicKQ.Item(tG) = 0 Then
k = k + 1
dArr(k, 1) = tG
End If
Next tG
End If

Set Dic = Nothing: Set DicKQ = Nothing
With Sheets("Thong bao")
.[P10:P65000].ClearContents
If k Then .[P10].Resize(k).Value = dArr
End With
End Sub
[/GPECODE]
cảm ơn bác ạ, cái này ổn rồi ạ. Chúc các bác ngủ ngon!
 
Lần chỉnh sửa cuối:
Em post lại nội dung #19 để các bác sửa giúp em nữa: "Còn một vấn đề nữa là tại Sub "GPE" khi sheet "du lieu vao" tại cột C tất cả đều >2.7 và cột E tất cả đều > 7.5 (như file em gửi cho bác vodoi2x) khi chạy macro sẽ báo lỗi và nếu chỉ có 1 dòng kết quả kể cả thỏa mãn <2.7 hoặc <7.5 nó cũng báo lỗi. Các bác khắc phục giúp em với ạ


riêng cái này tại sub GPE bạn thử sửa

đoạn code (gần cuối sub)

Mã:
With Sheets("Thong bao")
    .[A10:P65000].ClearContents
    .[A10].Resize(k, 15).Value = dArr
End With


thành (chỉ thêm phần đỏ đỏ sau)

Mã:
With Sheets("Thong bao")
    .[A10:P65000].ClearContents
    [COLOR="#FF0000"]If k > 0 Then [/COLOR].[A10].Resize(k, 15).Value = dArr
End With

kiểm tra lại xem còn bị không, vì tôi chưa xem kỹ nên bạn tự test, hoặc nếu không được phải nhờ tác giả bác Ba Tê thui
 
Bác ơi, nếu file này khi chỉ có 1 dòng kết quả sau khi chạy rồi chuyển sang sheet "Thong bao" nó sẽ báo lỗi. Rất xin lỗi vì đã mạo phạm bác, thực sự trong lòng em luôn coi bác là Thầy (đã có lần em nói rồi thì phải), mong bác bỏ quá cho.
Xem thử file 4 này nữa xem, nếu còn trường hợp nào "kỳ quái" nữa thì bàn tiếp.
 

File đính kèm

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

Back
Top Bottom