ChanhTQ@ xem giúp em sao mà nó trích lọc sót dữ liệuSử dụng macro sự kiện để hiện kết quả
ChanhTQ@ xem giúp em sao mà nó trích lọc sót dữ liệu
VD:
Phòng TCHC có 9 người những nó chỉ trích sang sheet IN có 8 người
Với lại giúp em kẻ khung cho vùng có dữ liệu trích sang nhe
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [F1]) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range
Dim TenDV As String, Rws As Long
Set sRng = Sheets("Main").Range("A1:A99").Find(Target.Value, , xlFormulas, xlWhole).Offset(, 1)
Rows("6:39").Hidden = False '<=}'
[A6].Resize(40, 40).ClearContents
If sRng Is Nothing Then
MsgBox "Nothing"
Else
TenDV = sRng.Value
Set Sh = ThisWorkbook.Worksheets("DuLieu")
Set Rng = Sh.Range(Sh.[c5], Sh.[C65500].End(xlUp))
Set sRng = Rng.Find(TenDV)
If sRng Is Nothing Then
MsgBox "No more"
Else
Rws = sRng.Offset(1, 1).End(xlDown).Row
If Rws > 65500 Then Rws = Sh.[C65500].End(xlUp).Row
Rws = Rws - sRng.Row + 1 '*'
[A6].Resize(Rws, 40).Value = Sh.Cells(sRng.Row, "A").Resize(Rws, 40).Value '*'
Rows(8 + Rws & ":39").Hidden = True
End If
End If
End If
End Sub
Format gì vậy Leo, đóng khung ???Em viết mảng, mà nhìn không ổn ...
[gpecode=vb]Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [F1]) Is
........
End Sub[/gpecode]
Cái phần Insert, Delete, ... nhờ sư phụ chỉ dùm, thay vì Hide như bác Cò, nếu Delete rồi Insert thì phải làm thế nào?
**** Đã sửa phần Insert, Delete. Còn Format nữa.
Phần 1 thì làm kiểu quái nào thì tùy vì có nhiều cách viết. Mình chọn cách xác định vùng cần lọc, copy mang qua sheet kết quả, được khuyến mãi cái khung, hihi.1- lọc và trích xuất dữ liều từ Sheet DULIEU sang sheet IN theo diều kiện ở ô f1
2- Tự động kẻ khung vùng dữ liệu được trích xuất sang
3 - Cuối vung dữ liệu được trích sang sheet IN chèn thêm vùng tô màu A12:AN17
SAO BÁC SA+BÁC CÒ+LEO KHÔNG DÙNG ADVANCE FILTER NHỈPHP:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [F1]) Is Nothing Then Dim Sh As Worksheet, Rng As Range, sRng As Range Dim TenDV As String, Rws As Long Set sRng = Sheets("Main").Range("A1:A99").Find(Target.Value, , xlFormulas, xlWhole).Offset(, 1) Rows("6:39").Hidden = False '<=}' [A6].Resize(40, 40).ClearContents If sRng Is Nothing Then MsgBox "Nothing" Else TenDV = sRng.Value Set Sh = ThisWorkbook.Worksheets("DuLieu") Set Rng = Sh.Range(Sh.[c5], Sh.[C65500].End(xlUp)) Set sRng = Rng.Find(TenDV) If sRng Is Nothing Then MsgBox "No more" Else Rws = sRng.Offset(1, 1).End(xlDown).Row If Rws > 65500 Then Rws = Sh.[C65500].End(xlUp).Row Rws = Rws - sRng.Row + 1 '*' [A6].Resize(Rws, 40).Value = Sh.Cells(sRng.Row, "A").Resize(Rws, 40).Value '*' Rows(8 + Rws & ":39").Hidden = True End If End If End If End Sub
Nhớ kẻ khung trước từ dòng 6:40
& Cảm ơn ConCoGia nhiều!
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$1" Then
Sheet2.[5:5000].Clear
Sheet7.[A5:AN5000].AdvancedFilter 2, Sheet7.[AO1:AO2], [A5]
Sheet7.[A5000].End(3).Offset(1, 0).Resize(9, 40).Copy Sheet2.[A5000].End(3).Offset(1, 0)
End If
End Sub
Híc, đã bảo:SAO BÁC SA+BÁC CÒ+LEO KHÔNG DÙNG ADVANCE FILTER NHỈ
PHP:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$1" Then Sheet2.[5:5000].Clear Sheet7.[A5:AN5000].AdvancedFilter 2, Sheet7.[AO1:AO2], [A5] Sheet7.[A5000].End(3).Offset(1, 0).Resize(9, 40).Copy Sheet2.[A5000].End(3).Offset(1, 0) End If End Sub
Còn nếu dùng bộ lọc thì phang luôn cái Auto Filter cho rồi, khỏi phải chèn thêm [AO1:AO2] cho nó.......xấu bảng tính của người ta đi. HícPhần 1 thì làm kiểu quái nào thì tùy vì có nhiều cách viết.
em vẫn thường xuyên xì gòn 5 ngày /tuần. Bác thích thì hôm nào em chìuhíc, đã bảo:
Còn nếu dùng bộ lọc thì phang luôn cái auto filter cho rồi, khỏi phải chèn thêm [ao1:ao2] cho nó.......xấu bảng tính của người ta đi. Híc
lâu quá hông nhậu "zí" chú em, còn lên "sì- gòn" thường hông ? Dám......nhậu hông ????
Bác oi cho em hỏiGóp "zí" bác Sa một cái cho "dzui"
Thân
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [F1]) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range
Dim TenDV As String, Rws As Long
Set sRng = Sheets("Main").Range("A1:A99").Find(Target.Value, , xlFormulas, xlWhole).Offset(, 1)
Rows("6:39").Hidden = False
[A6].Resize(40, 40).ClearContents
If sRng Is Nothing Then
MsgBox "Nothing"
Else
TenDV = sRng.Value
Set Sh = ThisWorkbook.Worksheets("DuLieu")
Set Rng = Sh.Range(Sh.[c5], Sh.[C65500].End(xlUp))
Set sRng = Rng.Find(TenDV)
If sRng Is Nothing Then
MsgBox "No more"
Else
Rws = sRng.Offset(1, 1).End(xlDown).Row
If Rws > 65500 Then Rws = Sh.[C65500].End(xlUp).Row
Rws = Rws - sRng.Row + 1
[A6].Resize(Rws, 40).Value = Sh.Cells(sRng.Row, "A").Resize(Rws, 40).Value
Rows(8 + Rws & ":39").Hidden = True
End If
End If
9 '* * * * * * * * * '
If Left(Target.Value, 3) = "BTG" Then
TenDV = InputBox("KTT" & Chr(10) & "BTGD", "Ban Muón Hien Thi Chúc Danh Nào?")
TenDV = UCase$(TenDV)
For Each Rng In Range("F7:F10")
If (Left(TenDV, 1) = "K" And Left(Rng.Value, 1) <> "K") _
Or (Left(TenDV, 1) <> "K" And Left(Rng.Value, 1) = "K") Then
Rng.EntireRow.Hidden = True
End If
Next Rng
End If
End If
End Sub
Cám ơn HYEN17 nhiều, nhưng bạn có thể chỉnh lại giúp mình lọc danh sách dựa vô cột AN (cột 40).PHP:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [F1]) Is Nothing Then Dim Sh As Worksheet, Rng As Range, sRng As Range Dim TenDV As String, Rws As Long Set sRng = Sheets("Main").Range("A1:A99").Find(Target.Value, , xlFormulas, xlWhole).Offset(, 1) Rows("6:39").Hidden = False [A6].Resize(40, 40).ClearContents If sRng Is Nothing Then MsgBox "Nothing" Else TenDV = sRng.Value Set Sh = ThisWorkbook.Worksheets("DuLieu") Set Rng = Sh.Range(Sh.[c5], Sh.[C65500].End(xlUp)) Set sRng = Rng.Find(TenDV) If sRng Is Nothing Then MsgBox "No more" Else Rws = sRng.Offset(1, 1).End(xlDown).Row If Rws > 65500 Then Rws = Sh.[C65500].End(xlUp).Row Rws = Rws - sRng.Row + 1 [A6].Resize(Rws, 40).Value = Sh.Cells(sRng.Row, "A").Resize(Rws, 40).Value Rows(8 + Rws & ":39").Hidden = True End If End If 9 '* * * * * * * * * ' If Left(Target.Value, 3) = "BTG" Then TenDV = InputBox("KTT" & Chr(10) & "BTGD", "Ban Muón Hien Thi Chúc Danh Nào?") TenDV = UCase$(TenDV) For Each Rng In Range("F7:F10") If (Left(TenDV, 1) = "K" And Left(Rng.Value, 1) <> "K") _ Or (Left(TenDV, 1) <> "K" And Left(Rng.Value, 1) = "K") Then Rng.EntireRow.Hidden = True End If Next Rng End If End If End Sub
Nếu lọc theo cột [AN], thì khi đó, kết quả lọc sẽ không có ngay tên đơn vị như mẫu tại bài 1 của bạn;. . . , nhưng bạn có thể chỉnh lại giúp mình lọc danh sách dựa vô cột AN (cột 40).
khi mình chọn điều kien ở ô F1 sheet IN thì sẽ lọc những người có chức danh giống như cột AN và chèn thêm dòng ghi chú chấm công ở dưới
Thank!
Cám ơn ChanhTQ@.Nếu lọc theo cột [AN], thì khi đó, kết quả lọc sẽ không có ngay tên đơn vị như mẫu tại bài 1 của bạn;
Hơn nữa, khi lọc BTGĐ cũng sẽ f ải xử lí bổ sung để loại bỏ người không cần tới.
Công việc lọc này cũng không nhanh hơn bao nhiêu về tốc độ so với bây giờ bạn đã đạt.
Theo yêu cầu của bạn, ta chỉ cần chép các dòng từ 12-> 17 trong form mẫu dán vô vùng bắt đầu bỡi [A46] là đạt rồi còn gì!
Sau mỗi lần chạy macro, các dòng chưa có số liệu sẽ bị ẩn đi mà!
Cám ơn ChanhTQ@.
Em cũng không cần tiều đề như tên đơn vi ở #1, (tên đơn vi thì em xó thể làm dò tiềm từ 1 bảng phụ khác) mà chỉ cần lọc ra những
người thỏa mãn yêu cầu ở cột AN
Trân trọng cảm ơn