Hỏi về Lọc dữ liệu không đồng nhất bằng advanced filter (1 người xem)

Liên hệ QC

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

luannv.pn

Thành viên mới
Tham gia
3/5/13
Bài viết
2
Được thích
0
Hi các anh/chị:
Em đang cần làm một cái báo cáo cho bên bảo hiểm để họ thanh toán bảo hiểm cho bệnh nhân, nhưng trong quá trình nhập dữ liệu gửi sang bên BH, họ trả về một danh sách các lỗi dữ liệu cho mình như:
- Cùng một số thẻ nhưng sai họ tên
- Sai năm sinh
...
(trong file đính kèm sheet: "nhung loi sai").

1. Cho em hỏi có cách nào filter đuợc dữ liệu có cùng số thẻ nhưng khác họ tên?
2. Năm sinh >2013 và <1900?
3. Nếu không đuợc thì có cách nào highlight hoặc cách nào đó để giảm sai sót trong quá trình nhập dữ liệu được không ạ? (Em không chuyên Excel, google mãi thấy có phần advance filters nhưng không có cách nào dùng được).

Rất mong các anh chị giúp đỡ vì hiện tại em phải soi từng bản ghi một đến hoa hết cả mắt mà còn bị họ doạ phạt tiền nữa :(.
 

File đính kèm

làm cho bạn high light các số liêu nhâp sai
1-khi sai tên so với dữ liệu phía trên, tên (ở cột B) sẻ hiện màu vàng
2- tương tự như vật cho tuổi.
3-khi số tuổi ko hợp lệ (>2013,<1900) sẻ hiện màu đỏ.
mỡ Condition formatting xem.

khuyến mãi thêm nhập tự động
mình tạo thêm một sheet tưdiensolieu
khi bạn nhập số bảo hiểm, thì nó sẻ dòng lên phía trên, thấy số nào giống vậy thì tự động copy tên, tuổi, giới tính xuống
chưa có thì thui.
do chạy macro, nên nhớ hạ mức security xuống Med hoặc low nha.
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn nhapmon nhiều lắm. Mình biết cách làm rồi.
Cho mình hỏi thêm là mình muốn sắp xếp các bản ghi được highlight màu vàng lên trên đầu thì làm ntn?
Mình làm như thế này nhưng chỉ có vài bản ghi lên trên đầu, còn lại vẫn ở dưới.:
- Sort by "Column B", sort on "Cell color" :

1.jpg

- Kết quả:
2.jpg

Cảm ơn bạn nhapmon rất nhiều vì đã giúp mình thoát khỏi gánh nặng tâm lý mỗi khi xử lý dữ liệu.
 
Cảm ơn nhapmon nhiều lắm. Mình biết cách làm rồi.
Cho mình hỏi thêm là mình muốn sắp xếp các bản ghi được highlight màu vàng lên trên đầu thì làm ntn?
Mình làm như thế này nhưng chỉ có vài bản ghi lên trên đầu, còn lại vẫn ở dưới.:
- Sort by "Column B", sort on "Cell color" :



- Kết quả:

Cảm ơn bạn nhapmon rất nhiều vì đã giúp mình thoát khỏi gánh nặng tâm lý mỗi khi xử lý dữ liệu.

mình đang ở cty và xài máy 2003, nên chưa kiểm tra được.
nhưng mình nghỉ bạn toàn bộ vùng số liệu rồi hãy sort thì nó chọn hết, chắc là bạn chỉ chọn sort mà ko có chọn vùng số liệu nên nó bỏ sót (đoán vậy thôi)
 
khuyến mãi thêm nhập tự động
mình tạo thêm một sheet tưdiensolieu
khi bạn nhập số bảo hiểm, thì nó sẻ dòng lên phía trên, thấy số nào giống vậy thì tự động copy tên, tuổi, giới tính xuống
chưa có thì thui.
do chạy macro, nên nhớ hạ mức security xuống Med hoặc low nha.
Giải pháp dùng vòng lặp For:
[GPECODE=vb]For i = Target.Row To 3 Step -1
If Range("E" & i) = Target Then
Range("b" & i).Resize(, 3).Copy Target.Offset(, -3)
Exit For
End If
Next i[/GPECODE]
có thể được thay bằng giải pháp như sau sẽ nhanh hơn nếu dữ liệu lớn:
- Khai báo một biến Cll kiểu Range
- Sử dụng phương thức Find để tìm kiếm:
[GPECODE=vb]Set Cll = Range([E3], Target.Offset(-1)).Find(Target, LookAt:=xlWhole)
If Not Cll Is Nothing Then
Target.Offset(, -3).Resize(, 3).Value = Cll.Offset(, -3).Resize(, 3).Value
End If[/GPECODE]
Mà có lẽ giải pháp nhập tự động này không cần thiết vì người ta đang muốn tránh nhập trùng như vậy mà. Nên thay nó bởi giải pháp dùng Validation để tránh nhập trùng số thẻ thì hợp lý hơn.
 
Lần chỉnh sửa cuối:
Mà có lẽ giải pháp nhập tự động này không cần thiết vì người ta đang muốn tránh nhập trùng như vậy mà. Nên thay nó bởi giải pháp dùng Validation để tránh nhập trùng số thẻ thì hợp lý hơn.

ý của chủ thớt ko phải nhập trùng mà nhập sai anh ạh. cùng một số bão hiểm mà 2 tên.
như trong bài, ở trên gõ là " nguyễn văn Đúc", ở dưới gõ là "nguyễn văn Đức".
điền tự động thì nó có cái tai hại là lần gõ thứ nhất mà sai thì nó sẻ sai hết....hì hì

cám ơn anh góp ý, tôi đâu có biết viết code, lâu lâu rình rình thấy các cao thủ ko để ý, nhảy dù vậy mà...hì..hì
 
Chủ đề này cũng khá lâu rồi, giờ rảnh rỗi ngồi chế biến "lẩu thập cẩm" cho vui.

Nguyên liệu gồm có:
1. Một chút công thức trên sheet.
2. Phương thức AdvancedFilter trong VBA.
3. Một chút WorksheetFunction.
4. Một chút kiến thức về mảng (cái này là mới mon men bước chân vào nên không biết mình làm như vậy có ra cái giống gì không)

Và đây là sản phẩm:
[GPECODE=vb]Sub LocDLSai()
Dim i As Long, j As Long, sArr, Arr()
Application.ScreenUpdating = False
On Error Resume Next
Sheet2.Activate
[A2:F65000].Clear
[H2].FormulaR1C1 = "=OR('Danh sach'!RC3<1900,'Danh sach'!RC3>YEAR(TODAY()),COUNTIF('Danh sach'!C5,'Danh sach'!RC5)>1)"
Sheet1.[A1].CurrentRegion.Resize(Sheet1.[A1].CurrentRegion.Rows.Count - 2).AdvancedFilter 2, [H1:H2], [A1:E1]
[A1].CurrentRegion.Sort [E1], xlAscending, [A1], , xlAscending, , , xlYes
[H2].Clear
[F1] = "Lçi"

sArr = Range([C2], [C65000].End(xlUp)).Resize(, 3).Value
ReDim Arr(1 To UBound(sArr), 1 To 4)
For i = 1 To UBound(Arr)
For j = 1 To 3
Arr(i, j) = sArr(i, j)
Next
If WorksheetFunction.CountIf([E:E], Arr(i, 3)) > 1 Then Arr(i, 4) = "Trïng sè thÎ"
If Arr(i, 1) > Year(Date) Or Arr(i, 1) < 1900 Then
If Arr(i, 4) = "" Then
Arr(i, 4) = "N¨m sinh kh«ng hîp lÖ"
Else
Arr(i, 4) = Arr(i, 4) & ", n¨m sinh kh«ng hîp lÖ"
End If
End If
If (Year(Date) - Arr(i, 1) > 60) Or (Year(Date) - Arr(i, 1) > 55 And Arr(i, 2) = 0) Then
If Arr(i, 4) = "" Then
Arr(i, 4) = "Ngoµi tuæi L§"
Else
Arr(i, 4) = Arr(i, 4) & ", ngoµi tuæi L§"
End If
End If
If Arr(i, 3) <> Arr(i - 1, 3) Then
Cells(i + 1, 1).Resize(, 6).Interior.ColorIndex = IIf(Cells(i, 1).Interior.ColorIndex = xlNone, 35, xlNone)
Else
Cells(i + 1, 1).Resize(, 6).Interior.ColorIndex = Cells(i, 1).Interior.ColorIndex
End If
Next
[C2:F2].Resize(UBound(Arr)).Value = Arr
[A2].CurrentRegion.Borders.LineStyle = 1
Application.ScreenUpdating = True
End Sub[/GPECODE]
Bạn cứ từ từ thưởng thức nhé, thưởng thức nhanh quá nhân viên của tôi phục vụ không kịp đâu.
 

File đính kèm

Web KT

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

Back
Top Bottom