Lọc sữ liệu từ sheet "data" sang sheet "lọc" (1 người xem)

Liên hệ QC

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

thangteotdtt

Thành viên hoạt động
Tham gia
12/12/13
Bài viết
152
Được thích
42
Lọc dữ liệu từ sheet "data" sang sheet "lọc"

LỌC DỮ LIỆU TỪ SHEET "DATA" SANG SHEET "LỌC"
Khi chọn ô E3 và E4 thì cho ra danh sách ở sheet "LOC". Cảm ơn các bạn
 

File đính kèm

Lần chỉnh sửa cuối:
Vâng kết hợp advance filter và code, bạn giúp mình nhé.
 
Upvote 0
bạn giúp mình code đi nhé.
Code cho sheet LOC
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [I5:I6]) Is Nothing Then
    [A7:I1000].ClearContents
    Loc
End If
End Sub
Code Loc, cách viết hơi kỳ kỳ nhưng cũng hiệu quả. Chọn thay đổi tại I5 và I6 sẽ có kết quả
Chú ý dữ liệu tại dòng 6 của sheet DATA mình thay đổi xíu là copy dán giá trị, không dùng công thức +3 như trong file gốc
PHP:
Sub Loc()
Dim Sarr(), Res(1 To 10000, 1 To 9)
Dim Str1 As String, Str2 As String, Found1 As Range, Found2 As Range
Dim Col As Long, I As Long, J As Long, K As Long
Str1 = Sheets("Loc").[I5]: Str2 = Sheets("Loc").[I6]
With Sheets("Data")
    Set Found1 = .[I5:AJ5].Find(Str1, , , 1)
    If Not Found1 Is Nothing Then
        Set Found2 = Found1.Offset(1).Resize(, 6).Find(Str2, , , 1)
        If Not Found2 Is Nothing Then
            Sarr = .Range(.[B7], .[B65536].End(3)).Resize(, Found2.Column - 1).Value
            For I = 1 To UBound(Sarr)
                If UCase(Sarr(I, UBound(Sarr, 2))) = "X" Then
                    K = K + 1
                    For J = 1 To 7
                        Res(K, J + 1) = Sarr(I, J)
                    Next
                     Res(K, 1) = K: Res(K, 9) = "X"
                End If
            Next
            If K Then Sheets("loc").[A7].Resize(K, 9) = Res
        End If
    End If
End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
[/PHP]
Code Loc, cách viết hơi kỳ kỳ nhưng cũng hiệu quả. Chọn thay đổi tại I5 và I6 sẽ có kết quả
Chú ý dữ liệu tại dòng 6 của sheet DATA mình thay đổi xíu là copy dán giá trị, không dùng công thức +3 như trong file gốc
PHP:
Sub Loc()
Dim Sarr(), Res(1 To 10000, 1 To 9)
Dim Str1 As String, Str2 As String, Found1 As Range, Found2 As Range
Dim Col As Long, I As Long, J As Long, K As Long
Str1 = Sheets("Loc").[I5]: Str2 = Sheets("Loc").[I6]
With Sheets("Data")
    Set Found1 = .[I5:AJ5].Find(Str1, , , 1)
    If Not Found1 Is Nothing Then
        Set Found2 = Found1.Offset(1).Resize(, 6).Find(Str2, , , 1)
        If Not Found2 Is Nothing Then
            Sarr = .Range(.[B7], .[B65536].End(3)).Resize(, Found2.Column - 1).Value
            For I = 1 To UBound(Sarr)
                If UCase(Sarr(I, UBound(Sarr, 2))) = "X" Then
                    K = K + 1
                    For J = 1 To 7
                        Res(K, J + 1) = Sarr(I, J)
                    Next
                     Res(K, 1) = K: Res(K, 9) = "X"
                End If
            Next
            If K Then Sheets("loc").[A7].Resize(K, 9) = Res
        End If
    End If
End With
End Sub
VD: Mình muốn thêm vùng [I5:AJ5] thành vùng [I5:CU5] chẳng hạn mình có chỉnh sửa thêm code gì nữa không bạn Hải hay chỉ thêm vùng đó vào là ổn.
Khi nhấn vào 2 nút đó cho nó tự động kẻ dòng (border) luôn ấy bạn. Cảm phiền bạn.
Nếu có khó quá thì tới đây cũng được rồi bạn.
 
Upvote 0
VD: Mình muốn thêm vùng [I5:AJ5] thành vùng [I5:CU5] chẳng hạn mình có chỉnh sửa thêm code gì nữa không bạn Hải hay chỉ thêm vùng đó vào là ổn.
Khi nhấn vào 2 nút đó cho nó tự động kẻ dòng (border) luôn ấy bạn. Cảm phiền bạn.
Nếu có khó quá thì tới đây cũng được rồi bạn.
+
Bạn thay 2 code này vào
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [I5:I6]) Is Nothing Then
    [A7:I1000].Clear
    Loc
End If
End Sub
Cái chỗ AJ5 bạn cứ thay thoải mái, khi nào không chạy thì tính sau
PHP:
Sub Loc()
Dim Sarr(), Res(1 To 10000, 1 To 9)
Dim Str1 As String, Str2 As String, Found1 As Range, Found2 As Range
Dim I As Long, J As Long, K As Long, C As Long
Str1 = Sheets("Loc").[I5]: Str2 = Sheets("Loc").[I6]
With Sheets("Data")
    Set Found1 = .[I5:AJ5].Find(Str1, , , 1)
    If Not Found1 Is Nothing Then
        C = Found1.End(2).Column - Found1.Column
        Set Found2 = Found1.Offset(1).Resize(, C).Find(Str2, , , 1)
        If Not Found2 Is Nothing Then
            Sarr = .Range(.[B7], .[B65536].End(3)).Resize(, Found2.Column - 1).Value
            For I = 1 To UBound(Sarr)
                If UCase(Sarr(I, UBound(Sarr, 2))) = "X" Then
                    K = K + 1
                    For J = 1 To 7
                        Res(K, J + 1) = Sarr(I, J)
                    Next
                     Res(K, 1) = K: Res(K, 9) = "X"
                End If
            Next
            If K Then
                Sheets("loc").[A7].Resize(K, 9) = Res
                Sheets("loc").[A7].CurrentRegion.Borders.Value = 1
            End If
        End If
    End If
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
bài này dùng code được, nhưng dùng advancedfilter cũng khó ăn đấy. Theo mình dùng vòng lặp duyệt thì đơn giản.
hỏng khó đâu anh hải. Chỉ cần 1 chút thủ thuật là ngon lành cành đào mà--=0
các bạn xem file nhé
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
If Not Intersect(Target, [E3:E4]) Is Nothing Then  
   Sheet2.[A7:AJ65000].Clear  
   Sheet1.[B7:AJ6500].AdvancedFilter 2, [f3:f4], [B6:I6], False  
   Sheet2.Range("B6:B" & [B55000].End(3).Row).Offset(0, -1).Value = Evaluate("ROW(R:R)-1") 
   [A6] = "STT"  
   [A6].CurrentRegion.Borders.Value = 1 
End If 
 Application.ScreenUpdating = True
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn 2 bạn nhiều. Do mình sử dụng bằng điện thoại, chưa xem file được. Các bạn nhiệt tình quá. Mình quý các bạn lắm. Cảm ơn các bạn rất nhiều.
 
Upvote 0
Lọc Danh Sách Theo Đánh Dấu X

Như chủ đề, các bạn giúp mình lại nhé. Cảm ơn các bạn.
 

File đính kèm

Upvote 0

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

Back
Top Bottom