Lọc theo cột từ mảng sao cho những dòng trùng nhau chỉ xuất hiện 1 lần

Liên hệ QC
Lúc đầu là LỌC DUY NHẤT, còn bây giờ lại là SUMIF ---> Em hoàn toàn không hiểu vấn đề nằm ở chổ nào nữa ---> MỤC ĐÍCH CUỐI CÙNG của anh là gì?
Về SUMIF, nếu không cần giới hạn dòng cuối, sau không viết là:
Range("F2").FormulaR1C1 = "=SUMIF(C1,RC[-1],C2)"
 
Lần chỉnh sửa cuối:
Lúc đầu là LỌC DUY NHẤT, còn bây giờ lại là SUMIF ---> Em hoàn toàn không hiểu vấn đề nằm ở chổ nào nữa ---> MỤC ĐÍCH CUỐI CÙNG của anh là gì?
Về SUMIF, nếu không cần giới hạn dòng cuối, sau không viết là:
Range("F2").FormulaR1C1 = "=SUMIF(C1,RC[-1],C2)"
---
Chú có quan tâm thì chú mới viết, anh cám ơn chú nhiều.
Anh đang "xoay sở", "rị mọ" viết code từng chút một (hoàn toàn thực tế vì công việc thôi cho đở vất vả không tự nghĩ việc ra đâu).
Nếu chú có hứng thú thì anh gởi File lên chú sẽ hiểu vấn đề ngay thôi và anh biết chắc rằng chú xử lý sẽ tốt hơn anh rất nhiều !!!!!!!
Mến.
 
Lần chỉnh sửa cuối:
Mấy cái này là như nhau đó sếp :

PHP:
=SUMIF(A1:A100,C1,B1:B100)
=SUMIF(A1:A100,C1,B1)
=SUMIF(A1:A100,C1,B1:B1000)
=SUMIF(A1:A100,C1,B1:Z1000)

Nó đều hiểu là B1:B100 (tự động lấy ứng với A1:A100)
 
Mấy cái này là như nhau đó sếp :

PHP:
=SUMIF(A1:A100,C1,B1:B100)
=SUMIF(A1:A100,C1,B1)
=SUMIF(A1:A100,C1,B1:B1000)
=SUMIF(A1:A100,C1,B1:Z1000)

Nó đều hiểu là B1:B100 (tự động lấy ứng với A1:A100)
---
Ha ha ha ... lên sếp hồi nào vậy ptlong04x1 ?, sếp bị chú Ndu quan tâm la quá trời :=\+
Anh hỏi ptlong04x1 "tùm lum" từ Data/Validation, Trích lọc duy nhất, Hàm sumif là để anh làm "của nợ" này đây. Ptlong04x1 có cách nào hay thì giúp anh với.

" Anh còn hỏi nữa chứ chẳng thôi " +-+-+-+
Đính kèm File.
 

File đính kèm

  • VAT VA.xls
    21.5 KB · Đọc: 11
---
Ha ha ha ... lên sếp hồi nào vậy ptlong04x1 ?, sếp bị chú Ndu quan tâm la quá trời :=\+
Anh hỏi ptlong04x1 "tùm lum" từ Data/Validation, Trích lọc duy nhất, Hàm sumif là để anh làm "của nợ" này đây. Ptlong04x1 có cách nào hay thì giúp anh với.

" Anh còn hỏi nữa chứ chẳng thôi " +-+-+-+
Đính kèm File.
Theo như kết quả trong file, em thấy anh dùng Consolidate là nhanh nhất (mà hình như anh cũng đã từng thí nghiệm Consoldate trong file này thì phải)
 
---
Ha ha ha ... lên sếp hồi nào vậy ptlong04x1 ?, sếp bị chú Ndu quan tâm la quá trời :=\+
Anh hỏi ptlong04x1 "tùm lum" từ Data/Validation, Trích lọc duy nhất, Hàm sumif là để anh làm "của nợ" này đây. Ptlong04x1 có cách nào hay thì giúp anh với.

" Anh còn hỏi nữa chứ chẳng thôi " +-+-+-+
Đính kèm File.

Em làm đại code này, anh chạy thử xem, nếu cần chỉnh lại code cho phù hợp với dữ liệu. Chú ý :
- Dòng 5 --> 14 chứa dữ liệu trích lọc.
- Dòng 15 trở đi chứa dữ liệu ban đầu, anh điền hết dữ liệu rồi chạy code.
- Cột IV không được có dữ liệu.

PHP:
Sub Loc()
    Dim Cll As Range, Area As Range
    [5:14].Clear
    Range("A15", Cells(16, [IV15].End(xlToLeft).Column)).Copy [A5]
    Range("A15", [A65536].End(xlUp)).AdvancedFilter xlFilterCopy, , [IV1], True
    Range("IV1", [IV65536].End(xlUp)).Cut [A5]
    With WorksheetFunction
        For Each Cll In Range("A7", [A14].End(xlUp))
            Cll.Offset(, 1) = .SumIf(Range("A17", [A65536].End(xlUp)), Cll, [B17])
            Cll.Offset(, 2) = [A:A].Find(Cll, [A16]).Offset(, 2)
            Cll.Offset(, 3) = "=RC[-2]*RC[-1]"
        Next Cll
        For Each Area In Range("E17", Cells([A65536].End(xlUp).Row, _
                     .Count([E16:IV16]) + 4)).SpecialCells(2).Areas
            Area.Copy Cells(14, Area.Column).End(xlUp).Offset(1)
        Next Area
    End With
End Sub

Theo như kết quả trong file, em thấy anh dùng Consolidate là nhanh nhất

Anh ndu96081631 bày em dùng Consolidate với.
 

File đính kèm

  • VAT VA.xls
    38 KB · Đọc: 23
Em làm đại code này, anh chạy thử xem, nếu cần chỉnh lại code cho phù hợp với dữ liệu.
---
Nhìn code của ptlong04x1 thấy mà "nể", không hiểu tí gì +-+-+-+
Anh vận dụng code Trích lọc duy nhất và hàm Sumif của ptlong04x1 để viết, không có For nào mà cũng ra được kết quả ! :-=
 
Anh ndu96081631 bày em dùng Consolidate với.
Thông thường nếu trích lọc duy nhất mà có kèm yêu cầu tính tổng thì không nên dùng Advanced Filter mà phải là Consolidate hoặc PivotTable
PivotTable là công cụ mạnh, khỏi phải bàn rồi ---> Còn với bài này, nếu làm bằng Consolidate thì code chỉ có vầy thôi:
PHP:
Sub Loc_Consolidate()
  Range("A5").CurrentRegion.ClearContents
  With Range("A15:IV65536")
    Range("A5").Consolidate .Address(, , 2), 9, True, True
  End With
End Sub
 
Anh cho em xem đoạn code không dùng for với, code này mới prồ đây}}}}}}}}}}}}}}}
---
Anh ndu96081631 bày em dùng Consolidate với.
---

Anh gởi ptlong04x1 xem code không dùng For ( Được góp nhặt chủ yếu từ bạn ptlong04x1 ) và code Consolidate ( Được góp nhặt từ chú Ndu). Không có gì là của anh cả |||||

Ptlong04x1 xem có gì sai và không được gọn thì sửa giúp nhé.
( ptlong04x1 cho anh đ/c mail nhé)
Mong.
 

File đính kèm

  • VAT VA.xls
    55.5 KB · Đọc: 28
Lần chỉnh sửa cuối:
Thông thường nếu trích lọc duy nhất mà có kèm yêu cầu tính tổng thì không nên dùng Advanced Filter mà phải là Consolidate hoặc PivotTable
PivotTable là công cụ mạnh, khỏi phải bàn rồi ---> Còn với bài này, nếu làm bằng Consolidate thì code chỉ có vầy thôi:
PHP:
Sub Loc_Consolidate()
  Range("A5").CurrentRegion.ClearContents
  With Range("A15:IV65536")
    Range("A5").Consolidate .Address(, , 2), 9, True, True
  End With
End Sub

Consolidate tuyệt thật, trước đây em chưa từng dùng bao giờ, phải nghiên cứu tiếp thôi.+-+-+-++-+-+-++-+-+-+
 
Consolidate tuyệt thật, trước đây em chưa từng dùng bao giờ, phải nghiên cứu tiếp thôi.+-+-+-++-+-+-++-+-+-+
Dể ẹt ---> Cứ Record macro là ra ---> Chỉ cần chú ý tham số Source của Consolidate chỉ chấp nhận địa chỉ cell dạng R1C1 mà thôi.... chẳng biết tại sao, nhưng địa chỉ dạng A1 nó cóc chơi... (Chú ý đoạn .Address(,,2) )
Consolidate này còn tuyệt hơn ở 1 điểm nữa là: Nó lấy được dử liệu trong 1 file đang đóng mà chẳng cần mở file lên tí nào (thế mới oách)
Hãy thử 1 lần và cảm nhận nhé
 
Web KT
Back
Top Bottom