Lọc và copy dữ liệu có điều kiện

Liên hệ QC

thuyyeu99

Trùm Nhiều Chuyện
Tham gia
6/6/08
Bài viết
1,729
Được thích
875
Em có 1 file excel mà trong đó có các sheet nhập dữ liệu (có tên bắt đầu bằng chữ E) và các sheet tổng hợp em muốn tạo nút để copy dữ liệu từ các sheet nhập qua sheet tổng hợp mà chỉ copy sheet nao co tên bằt đầu bằng chữ E

Đây là ví dụ mẫu

http://www.4shared.com/file/65212401/6f027c2f/VD_mau.html
 
Cái mà các sheet phải như nhau thì mình cũng đã nói với thuyyeu99, nhưng thuyyeu nói không được, nên cái đó cũng hơi khó cho VBA, thuyyeu muốn VBA phải dò trong sheet đó ô nào được đánh là đất thổ cư. ô nào là đất nông nghiệp, nhưng khổ nổi VBA không so sánh dc Unicode, nên mình có ý kiến là nên cho mã của mọi loại đất để VBA không cần so sánh VNI hay Unicode.

Cảm ơn bạn đã góp ý. Phần đó thì dùng theo cách của bạn là good lắm rồi bây giờ mình chỉ còn thắc mắc là ở Sheet kiểm tra cây trồng thôi bạn rockydatalone có giải pháp nào thực hiện được thì chỉ mình nha yêu cầu thì mình đã nói trong sheet kiem tra cây trồng rồi ( nó tự lọc tất cả các lcây và loại cây ở các sheet bắt đầu bằng chữ E để làm tiêu đề ). một lần nữa lại làm phiền bạn -=.,,
 
Upvote 0
Cảm ơn bạn đã góp ý. Phần đó thì dùng theo cách của bạn là good lắm rồi bây giờ mình chỉ còn thắc mắc là ở Sheet kiểm tra cây trồng thôi bạn rockydatalone có giải pháp nào thực hiện được thì chỉ mình nha yêu cầu thì mình đã nói trong sheet kiem tra cây trồng rồi ( nó tự lọc tất cả các lcây và loại cây ở các sheet bắt đầu bằng chữ E để làm tiêu đề ). một lần nữa lại làm phiền bạn -=.,,
Có phải bạn muốn lấy dữ liệu duy nhất theo cây trồng và loại cây tại B15:C22 của các Sheet bắt đầu = "E" không? và B15:C22 có thống nhất trong từ sheet.
 
Upvote 0
Àh mà mình cũng xin nói thêm là tên cây mỗi sheet khác nhau không bảng nào giống bảng thí dụ Sheet E1 có cây A, B nhưng Sheet E2 Lại có cây A,B,C,D và Sheet E3 lại có cây E,F mình muốn là lọc Theo tên cây và loại cây để làm tiêu đề phía trên
cây trồng
bưởi
ổi
Xoài
cóc
Loại A
Loại B
Loại C
Loại D
Loại A
Loại A
Loại A
Loại B


Đây mình muốn nó lọc tất cả các sheet về cây nó ra như vậy
 
Upvote 0
dạ em muốn lấy dữ liệu duy nhất để làm tiêu đề phía trên thí dụ có 10 cây xoài loại A ở tất cả các sheet thì nó chỉ lấy là cây xoài loại A để phía trên thôi (bỏ trùng)
 
Upvote 0
Àh mà mình cũng xin nói thêm là tên cây mỗi sheet khác nhau không bảng nào giống bảng thí dụ Sheet E1 có cây A, B nhưng Sheet E2 Lại có cây A,B,C,D và Sheet E3 lại có cây E,F mình muốn là lọc Theo tên cây và loại cây để làm tiêu đề phía trên
Có phải bạn muốn như sau, trang trí lại sau
 

File đính kèm

Upvote 0
da moi bang thi số lượng cây trồng mỗi khác
vi du sheet 1 có 4 cây (Cây 1 loại A, Cây 1 loại D, Cây 2 loại A, Cây 3 loại A) sheet 2 có 10 cây( Cây 1 loại A, Cây 1 loại D, Cây 2 loại A, Cây 3 loại A, Cây 4 loại A, Cây 5 loại D, Cây 5 loại A, Cây 6 loại A, Cây 7 loại A, Cây 8 loại D) (có thể giống nhau hoặc khác nhau)
cay trong
Cây 1 , Cây 1 , Cây 2 , Cây 3 , Cây 4 , Cây 5 , Cây 5 , Cây 6 , Cây 7 , Cây 8
loại A, loại D, loại A, loại A, loại A, loại D, loại A, loại A, loại A, loại D

nếu trùng thì chỉ láy 1 cây làm tiêu đề phía trên vd Sheet 1 có Cây 1 loại A và sheet 2 cũng có Cây 1 loại A thì khi qua bảng kiểm tra nó chỉ thể hiện là
cây1 loại A
 
Upvote 0
da moi bang thi số lượng cây trồng mỗi khác
vi du sheet 1 có 4 cây (Cây 1 loại A, Cây 1 loại D, Cây 2 loại A, Cây 3 loại A) sheet 2 có 10 cây( Cây 1 loại A, Cây 1 loại D, Cây 2 loại A, Cây 3 loại A, Cây 4 loại A, Cây 5 loại D, Cây 5 loại A, Cây 6 loại A, Cây 7 loại A, Cây 8 loại D) (có thể giống nhau hoặc khác nhau)
cay trong
Cây 1 , Cây 1 , Cây 2 , Cây 3 , Cây 4 , Cây 5 , Cây 5 , Cây 6 , Cây 7 , Cây 8
loại A, loại D, loại A, loại A, loại A, loại D, loại A, loại A, loại A, loại D

nếu trùng thì chỉ láy 1 cây làm tiêu đề phía trên vd Sheet 1 có Cây 1 loại A và sheet 2 cũng có Cây 1 loại A thì khi qua bảng kiểm tra nó chỉ thể hiện là
cây1 loại A
Bạn xem file trên chưa, còn trang điểm lại sau mà. Cứ hiện lên hết cho dễ lấy dữ liệu sau đó dùng VBA trang điểm lại.
Bạn chép lại thay thế code trong file và chạy, code này sẽ lấy số lượng luôn.
PHP:
Option Explicit
Sub LayLoaiCay()
With Application
       .DisplayAlerts = False
       .ScreenUpdating = False
       .Calculation = xlCalculationManual
End With
Dim ShName As String, SoSh As Byte, iSh As Byte
Dim iR As Long, Er As Long, EndR As Long, SoDong As Long, nR As Long
Dim Data As Range
Sheet9.Select
[V2:AA1000].ClearContents
[D4:O5].ClearContents
[A6:R1000].ClearContents
SoSh = Worksheets.Count
    For iSh = 1 To SoSh
        ShName = Trim(Sheets(iSh).Name)
        If Left(ShName, 1) = "E" Then
            nR = nR + 1
            With Sheets(iSh)
                Er = Sheet9.[W65000].End(xlUp).Row
                EndR = .[B65000].End(xlUp).Row - 1
                SoDong = EndR - 14
                Range("W" & Er + 1 & ":X" & Er + SoDong).Value = .Range("B15:C" & EndR).Value 'Lay loai cay
                Range("Y" & Er + 1 & ":Y" & Er + SoDong).Value = .Range("E15:E" & EndR).Value 'Lay so luong
                Range("V" & Er + 1 & ":V" & Er + SoDong).Value = ShName 'Lay ma HS
                Range("A" & 5 + nR).Value = nR 'STT
                Range("B" & 5 + nR).Value = ShName 'MaHS
                Range("C" & 5 + nR).Value = .[C6] 'Ten HS
               
            End With
         End If
    Next
    Set Data = Range("V1:Y" & Er + SoDong)
    With Data
        .Sort Key1:=Range("V1"), Order1:=xlAscending, Key2:=Range("W1"), Order1:=xlAscending, Key3:=Range("X1"), Order1:=xlAscending, Header:=xlYes
    End With
    Set Data = Range("W1:X" & Er + SoDong)
    With Data
        .AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "Z1:AA1"), Unique:=True
    End With
    'tao name de dung sumproduct
    Range("V2:V" & Er + SoDong).Name = "MaHS"
    Range("V2:V" & Er + SoDong).Offset(, 1).Name = "Cay"
    Range("V2:V" & Er + SoDong).Offset(, 2).Name = "Loai"
    Range("V2:V" & Er + SoDong).Offset(, 3).Name = "Slg"
    EndR = [Z65000].End(xlUp).Row
    Set Data = Range("Z2:AA" & EndR)
    For iR = 1 To EndR
        'If Data.Cells(iR, 1) <> Data.Cells(iR - 1, 1) Then
            Cells(4, 4 + iR - 1) = Data.Cells(iR, 1)
        'End If
        Cells(5, 4 + iR - 1) = Data.Cells(iR, 2)
    Next
    'Gan soluong theo cay trong
    Range(Cells(6, 4), Cells(5 + nR, 2 + EndR)).FormulaR1C1 = "=SUMPRODUCT((MaHS=RC2)*(Cay=R4C)*(Loai=R5C)*(Slg))"
    Range(Cells(6, 4), Cells(5 + nR, 2 + EndR)).Value = Range(Cells(6, 4), Cells(5 + nR, 2 + EndR)).Value
    '***/Xoa name
    With Sheet9
        .Names("Extract").Delete
    End With
        ActiveWorkbook.Names("Mahs").Delete
        ActiveWorkbook.Names("Cay").Delete
        ActiveWorkbook.Names("Loai").Delete
        ActiveWorkbook.Names("SLg").Delete
    Set Data = Nothing
With Application
       .DisplayAlerts = True
       .ScreenUpdating = True
       .Calculation = xlCalculationAutomatic
End With
End Sub
 
Upvote 0
Bạn chép lại thay thế code trong file và chạy, code này sẽ lấy số lượng luôn.
PHP:
Option Explicit
Sub LayLoaiCay()
With Application
       .DisplayAlerts = False
       .ScreenUpdating = False
       .Calculation = xlCalculationManual
End With
Dim ShName As String, SoSh As Byte, iSh As Byte
Dim iR As Long, Er As Long, EndR As Long, SoDong As Long, nR As Long
Dim Data As Range
Sheet9.Select
[V2:AA1000].ClearContents
[D4:O5].ClearContents
[A6:R1000].ClearContents
SoSh = Worksheets.Count
    For iSh = 1 To SoSh
        ShName = Trim(Sheets(iSh).Name)
        If Left(ShName, 1) = "E" Then
            nR = nR + 1
            With Sheets(iSh)
                Er = Sheet9.[W65000].End(xlUp).Row
                EndR = .[B65000].End(xlUp).Row - 1
                SoDong = EndR - 14
                Range("W" & Er + 1 & ":X" & Er + SoDong).Value = .Range("B15:C" & EndR).Value 'Lay loai cay
                Range("Y" & Er + 1 & ":Y" & Er + SoDong).Value = .Range("E15:E" & EndR).Value 'Lay so luong
                Range("V" & Er + 1 & ":V" & Er + SoDong).Value = ShName 'Lay ma HS
                Range("A" & 5 + nR).Value = nR 'STT
                Range("B" & 5 + nR).Value = ShName 'MaHS
                Range("C" & 5 + nR).Value = .[C6] 'Ten HS
               
            End With
         End If
    Next
    Set Data = Range("V1:Y" & Er + SoDong)
    With Data
        .Sort Key1:=Range("V1"), Order1:=xlAscending, Key2:=Range("W1"), Order1:=xlAscending, Key3:=Range("X1"), Order1:=xlAscending, Header:=xlYes
    End With
    Set Data = Range("W1:X" & Er + SoDong)
    With Data
        .AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "Z1:AA1"), Unique:=True
    End With
    'tao name de dung sumproduct
    Range("V2:V" & Er + SoDong).Name = "MaHS"
    Range("V2:V" & Er + SoDong).Offset(, 1).Name = "Cay"
    Range("V2:V" & Er + SoDong).Offset(, 2).Name = "Loai"
    Range("V2:V" & Er + SoDong).Offset(, 3).Name = "Slg"
    EndR = [Z65000].End(xlUp).Row
    Set Data = Range("Z2:AA" & EndR)
    For iR = 1 To EndR
        'If Data.Cells(iR, 1) <> Data.Cells(iR - 1, 1) Then
            Cells(4, 4 + iR - 1) = Data.Cells(iR, 1)
        'End If
        Cells(5, 4 + iR - 1) = Data.Cells(iR, 2)
    Next
    'Gan soluong theo cay trong
    Range(Cells(6, 4), Cells(5 + nR, 2 + EndR)).FormulaR1C1 = "=SUMPRODUCT((MaHS=RC2)*(Cay=R4C)*(Loai=R5C)*(Slg))"
    Range(Cells(6, 4), Cells(5 + nR, 2 + EndR)).Value = Range(Cells(6, 4), Cells(5 + nR, 2 + EndR)).Value
    '***/Xoa name
    With Sheet9
        .Names("Extract").Delete
    End With
        ActiveWorkbook.Names("Mahs").Delete
        ActiveWorkbook.Names("Cay").Delete
        ActiveWorkbook.Names("Loai").Delete
        ActiveWorkbook.Names("SLg").Delete
    Set Data = Nothing
With Application
       .DisplayAlerts = True
       .ScreenUpdating = True
       .Calculation = xlCalculationAutomatic
End With
End Sub

Nó Báo Lỗi 400 em không biết sữa !$@!!
 
Upvote 0
Ah Em xin lỗi nó chạy rồi. cam on anh Thu Nghi nha
 
Upvote 0
tôi muốn xin tài liệu hướng dẫn sử đụng excel để làm bảng tiến độ! ai có cho tôi xin với
 
Upvote 0
co bac nao co tai lieu huong dan su dung project de lam bang tien do ko? cho toi xin di! Thanks!
 
Upvote 0
Web KT

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

Back
Top Bottom