Thử dùng code này xem:Nhờ các bạn viết giùm mình code lọc dữ liệu,yêu cầu thì viết trong file đính kèm.Chân thành cảm ơn trước.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fRng As Range
On Error Resume Next
If Target.Address = "$G$15" Then
Range(Target.Offset(1), Target.End(xlDown)).Clear
Set fRng = Sheet1.Cells.Find(Left(Target, 2), , xlValues, xlPart)
If Not fRng Is Nothing Then
Sheet1.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1)
End If
End If
End Sub
Thử dùng code này xem:
PHP:Private Sub Worksheet_Change(ByVal Target As Range) Dim fRng As Range On Error Resume Next If Target.Address = "$G$15" Then Range(Target.Offset(1), Target.End(xlDown)).Clear Set fRng = Sheet1.Cells.Find(Left(Target, 2), , xlValues, xlPart) If Not fRng Is Nothing Then Sheet1.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1) End If End If End Sub
Chỉ sửa có mỗi 1 dòng, cái này:Bác giúp sửa giùm e code trong file e gửi đinh kèm với.Thanks
Trong file này thì lọc F1,F2,F3,F4 từ sheet1.Vậy e có thêm F5,F6,F7 lọc từ sheet3 thì làm sao vậy bác.Cảm ơn bác trước.Chỉ sửa có mỗi 1 dòng, cái này:
If Target.Address = "$G$15" Then
thành cái này:
If Not Intersect(Range("D15:G15"), Target) Is Nothing Then
Vậy thôi
Thì thêm thế này:Trong file này thì lọc F1,F2,F3,F4 từ sheet1.Vậy e có thêm F5,F6,F7 lọc từ sheet3 thì làm sao vậy bác.Cảm ơn bác trước.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fRng As Range
On Error Resume Next
If Not Intersect(Range("D15:G15"), Target) Is Nothing Then
Range(Target.Offset(1), Target.End(xlDown)).Clear
Set fRng = Sheet1.Cells.Find(Left(Target, 2), , xlValues, xlPart)
If Not fRng Is Nothing Then
Sheet1.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1)
End If
ElseIf Not Intersect(Range("H15:J15"), Target) Is Nothing Then
Range(Target.Offset(1), Target.End(xlDown)).Clear
Set fRng = Sheet3.Cells.Find(Left(Target, 2), , xlValues, xlPart)
If Not fRng Is Nothing Then
Sheet3.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1)
End If
End If
End Sub
Cụ thể thế nào bạn cho file lên xem thử nhé (mình chưa hình dung ra)Cho em làm phiền bác 1 tí,nếu e muốn đổi tên F1,F2,F3,F4,F5 ,F6 ,F7 thành F1x,F2x,F3x,F4x,F5y ,F6y ,F7y thì đổi ở dòng code nào vậy bác?Cảm ơn bác nhiều.
Thì lại sửa tiếp ---> Với các cell không liên tục ta dùng Union nhéDạ file đây bác.Thanks
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fRng As Range
On Error Resume Next
If Not Intersect(Union([D15], [F15], [H15], [J15]), Target) Is Nothing Then
Range(Target.Offset(1), Target.End(xlDown)).Clear
Set fRng = Sheet1.Cells.Find(Left(Target, 3), , xlValues, xlPart)
If Not fRng Is Nothing Then
Sheet1.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1)
End If
ElseIf Not Intersect(Union([E15], [G15], [I15], [K15]), Target) Is Nothing Then
Range(Target.Offset(1), Target.End(xlDown)).Clear
Set fRng = Sheet3.Cells.Find(Left(Target, 3), , xlValues, xlPart)
If Not fRng Is Nothing Then
Sheet3.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1)
End If
End If
End Sub
Cảm ơn bác nhiều,nhưng khi bên sheet đầu tiên nếu trong các ô có công thức thì nó lọc qua cả công thức đưa qua làm sai kết quả,bác chỉnh giùm e sao cho chỉ lọc qua kết quả thôi.E có gửi file đính kèm ở dưới.Thì lại sửa tiếp ---> Với các cell không liên tục ta dùng Union nhé
Lúc đầu thì F1, F2... nên ta dùng Left(Target,2) ---> Giờ đổi thành F1x, F2x, F1y, F2y... nên sửa code thành Left(Target,3)PHP:Private Sub Worksheet_Change(ByVal Target As Range) Dim fRng As Range On Error Resume Next If Not Intersect(Union([D15], [F15], [H15], [J15]), Target) Is Nothing Then Range(Target.Offset(1), Target.End(xlDown)).Clear Set fRng = Sheet1.Cells.Find(Left(Target, 3), , xlValues, xlPart) If Not fRng Is Nothing Then Sheet1.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1) End If ElseIf Not Intersect(Union([E15], [G15], [I15], [K15]), Target) Is Nothing Then Range(Target.Offset(1), Target.End(xlDown)).Clear Set fRng = Sheet3.Cells.Find(Left(Target, 3), , xlValues, xlPart) If Not fRng Is Nothing Then Sheet3.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1) End If End If End Sub
Thế thôi
Sửa đoạn:Cảm ơn bác nhiều,nhưng khi bên sheet đầu tiên nếu trong các ô có công thức thì nó lọc qua cả công thức đưa qua làm sai kết quả,bác chỉnh giùm e sao cho chỉ lọc qua kết quả thôi.E có gửi file đính kèm ở dưới.
Cảm ơn sự giúp đỡ nhiệt tình của bác,bác cho em hỏi thêm 1 câu nữa,sau khi sửa dòng lệnh này thì đã thực hiện công việc đầy đủ nhưng khi lọc thì ngay vị trí cần lọc qua nó bị đổi font và mất định dạng chính giữa theo định dạng ban đầu.Chúc bác ngày càng nhiều sức khoẻ.Sửa đoạn:
Sheet1.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1)
Thành:
Sheet1.Range(fRng.Offset(1), fRng.End(xlDown)).Copy: Target.Offset(1).PasteSpecial 3
Sửa đoạn:
Sheet3.Range(fRng.Offset(1), fRng.End(xlDown)).Copy Target.Offset(1)
Thành:
Sheet3.Range(fRng.Offset(1), fRng.End(xlDown)).Copy: Target.Offset(1).PasteSpecial 3
Vì chỉ Paste Values nên đương nhiên nó chỉ lấy Values, không lấy FormatsCảm ơn sự giúp đỡ nhiệt tình của bác,bác cho em hỏi thêm 1 câu nữa,sau khi sửa dòng lệnh này thì đã thực hiện công việc đầy đủ nhưng khi lọc thì ngay vị trí cần lọc qua nó bị đổi font và mất định dạng chính giữa theo định dạng ban đầu.Chúc bác ngày càng nhiều sức khoẻ.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fRng As Range
On Error Resume Next
If Not Intersect(Union([D15], [F15], [H15], [J15]), Target) Is Nothing Then
Range(Target.Offset(1), Target.End(xlDown)).Clear
Set fRng = Sheet1.Cells.Find(Left(Target, 3), , xlValues, xlPart)
If Not fRng Is Nothing Then
Sheet1.Range(fRng.Offset(1), fRng.End(xlDown)).Copy
Target.Offset(1).PasteSpecial 3
Target.Offset(1).PasteSpecial 4
End If
Application.CutCopyMode = 0
ElseIf Not Intersect(Union([E15], [G15], [I15], [K15]), Target) Is Nothing Then
Range(Target.Offset(1), Target.End(xlDown)).Clear
Set fRng = Sheet3.Cells.Find(Left(Target, 3), , xlValues, xlPart)
If Not fRng Is Nothing Then
Sheet3.Range(fRng.Offset(1), fRng.End(xlDown)).Copy
Target.Offset(1).PasteSpecial 3
Target.Offset(1).PasteSpecial 4
End If
Application.CutCopyMode = 0
End If
End Sub