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 (1 người xem)

Liên hệ QC

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

samac99999

Thành viên mới
Tham gia
23/10/09
Bài viết
1
Được thích
0
Mình mới nhập môn Excel nên còn bở ngỡ quá!

Có 1 bảng tính nhiều cột và có những ô trong 1 cột trùng nhau. Vậy làm cách nào để lọc và xuất ra 1 cột khác, nhưng nếu những giá trị trùng nhau chỉ xuất hiện 1 dòng thôi.
Các bạn giúp mình với nhé. Cảm ơn rất nhiều!

Các bạn mở file đính kèm nhé.
 
Lần chỉnh sửa cuối:
Cái này dùng Advanced Filter là tuyệt nhất, xem File nhé.
 

File đính kèm

Nhờ các bạn giải đáp

Cái này dùng Advanced Filter là tuyệt nhất, xem File nhé.
---
Tôi cố gắng làm như bạn ptong04x12hướng dẫn, chỉ khác nơi nhận kết quả và dữ liệu cùng 1 cột nhưng không sao ra ra được kết quả, rất mong các bạn xem và giải đáp giúp.
Đính kèm file
Cám ơn các bạn.
(KGởi các Smod, Mod: dạo này không hiểu sao lên mạng khó khăn quá, báo lỗi liên tục )
 

File đính kèm

Lần chỉnh sửa cuối:
---
Tôi cố gắng làm như bạn ptong04x12hướng dẫn, chỉ khác nơi nhận kết quả và dữ liệu cùng 1 cột nhưng không sao ra ra được kết quả, rất mong các bạn xem và giải đáp giúp.
Đính kèm file
Cám ơn các bạn.
(KGởi các Smod, Mod: dạo này không hiểu sao lên mạng khó khăn quá, báo lỗi liên tục )

Nếu vùng dữ liệu ở cột A thì không thể copy to 1 ô của cột A được anh ạ (đây là đặc điểm của Advanced Filter), nếu muốn, anh chọn Copy to B1 rồi Filter sau đó copy sang A1.
 
Bạn quên nhấn vào nút "unique records only" thì sẽ không ra đúng là phải rùi.
Thử lại xem.
Thân.
 
Nếu vùng dữ liệu ở cột A thì không thể copy to 1 ô của cột A được anh ạ (đây là đặc điểm của Advanced Filter), nếu muốn, anh chọn Copy to B1 rồi Filter sau đó copy sang A1.
---
Nếu là đặc điểm của Advanced Filter, thì khi hướng dẩn có cần nêu rõ không ?
Trường hợp anh cần lại cứ rơi vào những đặc điểm như thế :-= :-= :-=
Thân chào nhé.
---
To : Po_Pikachu : có nhấn nút Unique ..., bạn thử xem )(&&@@
Thân
 
Lần chỉnh sửa cuối:
---
Nếu là đặc điểm của Advanced Filter, thì khi hướng dẩn có cần nêu rõ không ?
Trường hợp anh cần lại cứ rơi vào những đặc điểm như thế :-= :-= :-=
Thân chào nhé.

Nhưng mà nếu anh Copy to vào 1 ô ở cột A nằm dưới vùng dữ liệu, ví dụ [A20] chẳng hạn thì lại được, AF xoá trắng dữ liệu dưới vùng Copy to trước khi hiện kết quả, hehe.--=0--=0--=0
 
Lần chỉnh sửa cuối:
Nhưng mà nếu anh Copy to vào 1 ô ở cột A nằm dưới vùng dữ liệu, ví dụ [A20] chẳng hạn thì lại được, AF xoá trắng dữ liệu dưới vùng Copy to trước khi hiện kết quả, hehe.--=0--=0--=0
---
Anh biết, anh chỉ thắc mắc "Copy to vào 1 ô ở cột A nằm trên vùng dữ liệu" thôi.
Nếu là đặc điểm thì anh OK.
:-= :-= :-=
 
Anh có muốn xài code không, nếu có anh đưa file lên em viết code.
 
---
Anh biết, anh chỉ thắc mắc "Copy to vào 1 ô ở cột A nằm trên vùng dữ liệu" thôi.
Nếu là đặc điểm thì anh OK.
:-= :-= :-=
Anh muốn copy vào cùng cột vẫn không có vấn đề đâu
- Vào menu Data\Filter\Advanced Filter
- Mục Action anh chọn Filter the list, in - place (chứ không chọn Copy to...)
- List Range là vùng data nguồn
- Check vào Unique Records only
OK 1 nhát, rồi copy dử liệu sau khi lọc, paste vào cell A1 là xong
Và nói chung, đã làm được bằng tay thì code đương nhiên cũng làm được
 
Anh muốn copy vào cùng cột vẫn không có vấn đề đâu
- Vào menu Data\Filter\Advanced Filter
- Mục Action anh chọn Filter the list, in - place (chứ không chọn Copy to...)
- List Range là vùng data nguồn
- Check vào Unique Records only
OK 1 nhát, rồi copy dử liệu sau khi lọc, paste vào cell A1 là xong
Và nói chung, đã làm được bằng tay thì code đương nhiên cũng làm được
---
Cám ơn chú và bạn ptlong04x1 nhiều. Anh đã làm cụ thể theo hướng dẫn của chú, cho anh được hỏi?
Anh trích lọc từ sheet1, quăng qua sheet2 bắt đầu từ cell A2000 => làm theo chú hướng dẫn => ok. Nhưng dữ liệu từ cell A2000:A... thì code viết như thế nào và khi dữ liệu đang filter thì copy,paste vào cellA1 ra làm sao?
Mục đích: sau khi nhấn nút từ sheet1 ( sau khi trích lọc duy nhất còn nhiều việc xử lý ), mở sheet2 => nhìn vào kết quả thể hiện từ cell A1 ( xóa từ cell A2000:A...)
Mong tin chú và bạn ptlong04x1.
 
---
Cám ơn chú và bạn ptlong04x1 nhiều. Anh đã làm cụ thể theo hướng dẫn của chú, cho anh được hỏi?
Anh trích lọc từ sheet1, quăng qua sheet2 bắt đầu từ cell A2000 => làm theo chú hướng dẫn => ok. Nhưng dữ liệu từ cell A2000:A... thì code viết như thế nào và khi dữ liệu đang filter thì copy,paste vào cellA1 ra làm sao?
Mục đích: sau khi nhấn nút từ sheet1 ( sau khi trích lọc duy nhất còn nhiều việc xử lý ), mở sheet2 => nhìn vào kết quả thể hiện từ cell A1 ( xóa từ cell A2000:A...)
Mong tin chú và bạn ptlong04x1.
Ai chà... Em khó hình dung quá anh ơi
Sao anh không cho file lên (ghi rõ kết quả anh cần vào luôn)
 
Ai chà... Em khó hình dung quá anh ơi
Sao anh không cho file lên (ghi rõ kết quả anh cần vào luôn)
---
File "Lằng nhằng" lắm, anh "cóp nhặt" từng phần, chú giúp anh phần này trước nhé:

Nhưng dữ liệu từ cell A2000:A.... thì code trích lọc duy nhất (filter the lits, in-place) viết như thế nào và khi đó dữ liệu đang ở dạng filter thì copy vùng được trích lọc từ A2000:A....paste vào cellA1 viết ra làm sao?
:=\+ :-=
 
Lần chỉnh sửa cuối:
---
Nhưng dữ liệu từ cell A2000:A.... thì code trích lọc duy nhất (filter the lits, in-place) viết như thế nào và khi đó dữ liệu đang ở dạng filter thì copy vùng được trích lọc từ A2000:A....paste vào cellA1 viết ra làm sao?
:=\+ :-=

Đọc đoạn này, em cũng...không hiểu luôn, anh nói rõ chút nữa đi, cảm giác đang lâng lâng--=0--=0--=0
 
Đọc đoạn này, em cũng...không hiểu luôn, anh nói rõ chút nữa đi, cảm giác đang lâng lâng--=0--=0--=0
---
Anh viết như thế này bạn xem có đúng không ? ( thiệt khổ):
Mã:
 Range("A2000:A" & [A10000].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
 Range("A2000:A" & [A10000].End(xlUp).Row).Copy Range("A1)
---
Ráng hiểu dùm đi !$@!!
---
???
Anh đang vướng chổ hàm sumif, nếu được bạn hướng dẫn dùm nhé :-=
 
Lần chỉnh sửa cuối:
Anh viết như thế này bạn xem có đúng không ? ( thiệt khổ):
Mã:
 Range("A2000:A" & [A10000].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
 Range("A2000:A" & [A10000].End(xlUp).Row).Copy Range("A1)
---
Ráng hiểu dùm đi !$@!!

Theo em nên viết vậy cho gọn :

PHP:
    With Range("A10:A" & [A10000].End(xlUp).Row)
        .AdvancedFilter xlFilterInPlace, , , True
        .Copy [A1]
    End With
Anh đang vướng chổ hàm sumif, nếu được bạn hướng dẫn dùm nhé :-=

Anh xem link này :

http://www.giaiphapexcel.com/forum/showpost.php?p=58877&postcount=38
 

File đính kèm

---
Không ptlong04x1 ơi, vướng trong VBA, xem file đính kèm và hướng dẫn giúp nhé :-=

PHP:
Sub Macro1()
   Dim Rng As Range
   Set Rng = Range("A2:A" & [A65536].End(xlUp).Row)
   [F2].Formula = "=SUMIF(" & Rng.Address & ",$E$2," & Rng.Offset(, 1).Address & ")"
End Sub

Nhập liệu xong anh chạy lại code là được.
 
Một cách khác :

PHP:
Sub Macro1()
    eR = [A65536].End(xlUp).Row
    [F2].FormulaR1C1 = "=SUMIF(R2C1:R" & eR & "C1,RC[-1],R2C2)"
End Sub
Nếu anh muốn hàm tự cập nhật thì đưa sub vào sự kiện Worksheet_Change nữa là được.
 
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)"
 
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

---
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

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

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é
 

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

Back
Top Bottom