Thách đố về trích lọc danh sách duy nhất từ 2 vùng khác nhau và ghép lại (3 người xem)

Liên hệ QC

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

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,902
Được thích
5,303
Nghề nghiệp
Kinh doanh các mặt hàng văn phòng phẩm
Mình có câu đố này gửi đến các bạn.
Ở Sheet1 mình có một list danh sách trong cột A
Ở Sheet2 mình có một list danh sách trong cột A
Tại cột C ở sheet 2 ta sẽ trích xuất ra 1 list danh sách duy nhất, bao gồm các phần tử trong Cột A ở cả sheet 1 và sheet2.
Lưu ý là không dùng bất kỳ cột phụ nào.
Mời các bạn cùng tham gia.
 

File đính kèm

Nếu danh sách không liên tục thì cả hai phương án trên đều sai
 

Phong độ Bác vẫn như xưa. Bác làm hay lắm.
Đúng là chiều qua có bạn hỏi mình về vấn đề này, sáng ra mới ra câu đố ai ngờ Bác đã làm xong từ sớm.
Mình xin gửi 1 cách khác, trích và gộp từ 3 vùng khác nhau. và theo logic sẽ áp dụng cho 4 hay 5 vùng cũng được.
 

File đính kèm

Ở đây em thấy thuật giải là lập ra các danh sách riêng lẻ cho từng sheet, sau đó lập thêm điều kiện để trích lọc duy nhất! Có cách nào gom hết dữ liệu các sheet vào chung mảng 1 chiều sau đó trích lọc duy nhất!?
 
Lần chỉnh sửa cuối:
Ở đây em thấy thuật giải là lập ra các danh sách riêng lẻ cho từng sheet, sau đó lập thêm điều kiện để trích lọ duy nhất! Có cách nào gom hết dữ liệu các sheet vào chung mảng 1 chiều sau đó trích lọc duy nhất!?

Ý tưởng này ở đây nè

Ðề tài: Lọc thông tin với 2 điều kiện

Bài gởi: Lọc duy nhất từ 2 sheet sang sheet thứ 3

File đính kèm:
rar.gif
Cu Chuoi.rar

--------------------------------
Các bác kiểm tra giúp xem lỗi ở đâu mà khi em đặt name
PHP:
DS_1; DS_2 dạng OFFSET(A2,,,COUNTA(A:A)-1)
thì danh sách lọc duy nhất không hiện ra​
 
Ý tưởng này ở đây nè

Ðề tài: Lọc thông tin với 2 điều kiện

Bài gởi: Lọc duy nhất từ 2 sheet sang sheet thứ 3

File đính kèm:
rar.gif
Cu Chuoi.rar

--------------------------------
Các bác kiểm tra giúp xem lỗi ở đâu mà khi em đặt name
PHP:
DS_1; DS_2 dạng OFFSET(A2,,,COUNTA(A:A)-1)
thì danh sách lọc duy nhất không hiện ra​

Mình thử thấy không hiệu quả, xem lại nhé.

Thân!
 

File đính kèm

Mình thử thấy không hiệu quả, xem lại nhé.

Thân!

Oài
Bác cứ đùa
Chỉ lấy thùng hứng nước mà không nối ống dẫn dài thêm thì nước sao chảy tới

Tại sheet KQ, Unhide cột A rồi copy (kéo fill) công thức xuống xem có thấy hiệu quả không?
 
Oài
Bác cứ đùa
Chỉ lấy thùng hứng nước mà không nối ống dẫn dài thêm thì nước sao chảy tới

Tại sheet KQ, Unhide cột A rồi copy (kéo fill) công thức xuống xem có thấy hiệu quả không?

To boyxin
Cột A này có thể đặt Name luôn không? Vì theo như đề bài không cho dùng cột phụ!
 
Oài
Bác cứ đùa
Chỉ lấy thùng hứng nước mà không nối ống dẫn dài thêm thì nước sao chảy tới

Tại sheet KQ, Unhide cột A rồi copy (kéo fill) công thức xuống xem có thấy hiệu quả không?

Mà theo em thì ý của Anh Kiệt(Cadi_fi) hình như là dồn hết dữ liệu vào một name, sau đó sẽ trích lọc duy nhất từ name này.
Còn nếu dùng cột phụ thì đâu phức tạp đến thế Bác Boyxin nhỉ. Bác thử đơn giản lại cột A xem
PS : À mà trong công thức của Bác, nếu có dòng rỗng thì nó đưa vào số 0 luôn Bác ơi.
 
Lần chỉnh sửa cuối:
Nói thật, cái này chỉ làm chơi để nghiên cứu thuật toán là chính... chứ bảo ai đó áp dụng để trích lọc duy nhất xuyên qua cở.. 20 sheet thì ko hiệu quả
Nếu là tôi đang có trong tay 20 sheet như vậy thì tôi thà dùng AF trích duy nhất cho từng sheet, sau đó copy chúng vào 1 sheet chung, rồi lại AF lần nữa là xong... Công việc chắc cũng ko tốn quá 10 phút
Và nếu tôi muốn tự động luôn thì Record macro quá trình này... Bấm cái rẹt và.. nhịp đùi
--------------
Có 1 bài toán khác xem chừng cũng khá hửu dụng:
Tôi có trong tay 1 danh sách gốc (ko trùng) nằm ở 1 sheet riêng! Một vài Item của danh sách này nằm rải rác ở các sheet.. giờ tôi muốn trích lọc duy nhất toàn bộ các Item đã từng xuất hiện ở các sheet
Các bạn thử nghiên cứu xem
ANH TUẤN
 
Lần chỉnh sửa cuối:
Oài
Bác cứ đùa
Chỉ lấy thùng hứng nước mà không nối ống dẫn dài thêm thì nước sao chảy tới

Tại sheet KQ, Unhide cột A rồi copy (kéo fill) công thức xuống xem có thấy hiệu quả không?

  1. Dạo này tớ lẩn thẩn rồi, làm hoài mà không được. Mong chỉ giáo
  2. Vẫn phải cột phụ à ?? Nếu dùng cột phụ thì cần gì các Name đáng sợ thế, chỉ cần 3 cái hàm index, match, countif . . là tớ cũng làm được.
Thân!
 

File đính kèm

  1. Dạo này tớ lẩn thẩn rồi, làm hoài mà không được. Mong chỉ giáo
  2. Vẫn phải cột phụ à ?? Nếu dùng cột phụ thì cần gì các Name đáng sợ thế, chỉ cần 3 cái hàm index, match, countif . . là tớ cũng làm được.
Thân!
Hic hic hic
  1. Name nào là name đáng sợ vậy?
  2. Bác không dùng name thì cần mấy cột phụ
  3. Mong nhận được sự chỉ giáo của bác (index, match, countif . . )
  4. Em là lính mới nên cần học hỏi nhiều, mong bác không từ chối
 
Hic hic hic
  1. Name nào là name đáng sợ vậy?
  2. Bác không dùng name thì cần mấy cột phụ
  3. Mong nhận được sự chỉ giáo của bác (index, match, countif . . )
  4. Em là lính mới nên cần học hỏi nhiều, mong bác không từ chối

  1. Không phải là Name đáng sợ mà các công thức (Sorry)
  2. Tớ sẽ dùng khá nhiều cột phụ (khoảng 2 hoặc 3 gì đó - có ai cấm đâu!--=0)
  3. Nếu đã dùng cột phụ (như của tớ) thì mấy cái trích lọc đó ai cũng làm được.
  4. Tớ xin góp vui một cái UDF : Có thể dùng Name hay mảng trực tiếp.
PHP:
Function DanhSach(MangDL1 As Range, Optional MangDL2 As Range, Optional MangMa As Range)
    Application.Volatile (False)
    On Error Resume Next
    Dim i As Long, i1 As Byte, Temp As Range
    
    For i1 = 1 To 2
        Select Case i1
            Case 1:   Set Temp = MangDL1
            Case 2:   Set Temp = MangDL2
        End Select
    
        If Temp.Columns.Count = 1 Then
            If MangMa.Rows.Count = 0 Then
                DanhSach = Temp(1)
            Else
                For i = 1 To Temp.Rows.Count
                    If Temp(i) <> "" Then
                    If WorksheetFunction.CountIf(MangMa, Temp(i)) = 0 Then
                        DanhSach = Temp(i)
                        Exit For
                    End If: End If
                Next
            End If
        End If
    Next
    Set Temp = Nothing
End Function

Vì lười nên không tiếp tục làm cái UDF sắp xếp theo thứ tự.
Còn việc là 2 mảng hay n mảng thì chỉ việc thay đổi UDF chút xíu thôi (vòng lặp)

Thân!
 

File đính kèm

Dù muộn còn hơn không bao giờ

PHP:
Option Explicit

Sub Filter2Sh()
    Dim RngFilter As Range, RngFiltered As Range
    
    Set RngFilter = Sheet1.Range("A1:A" & [a65432].End(xlUp).Row)
    With RngFilter
        .AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=RngFilter, Unique:=True
        Set RngFiltered = RngFilter.SpecialCells(xlCellTypeVisible)
    End With
    With Sheet2
      RngFiltered.Copy Destination:=.[e1]
      .Range("A1:A" & [a65432].End(xlUp).Row).Copy Destination:=.Range("E" _
         & .[e65432].End(xlUp).Row + 1)
      Set RngFilter = .Range("E1:E" & .[e65432].End(xlUp).Row)
    End With
    With RngFilter
        .AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=RngFilter, Unique:=True
        Set RngFiltered = RngFilter.SpecialCells(xlCellTypeVisible)
    End With
    With Sheet2
      RngFiltered.SpecialCells(xlCellTypeVisible).Copy Destination:=.[F1]
      ActiveSheet.ShowAllData:            .Columns("E:E").Delete
      If .[e1] = .[e2] Then .[e1].Delete
    End With
    
End Sub
 
Hình như cái của bác Sa làm là:
-Filter Unique vùng 1
-Copy vùng vừa được filter sang vùng tạm
-Sát nhập vùng 2 với vùng tạm
-Filter lần nừa vùng mới sát nhập

Theo tôi như thế có vẽ không nhanh lắm
Tại sao không là:
-Copy vùng 1 và 2 sang 1 vùng tạm
-Filter unique vùng này

Vậy là xong vì nếu có 3 vùng, 5 vùng mà bác làm thế thì chỉ tổ làm cho công việc rắc rối thêm
 
Tại sao không là:
-Copy vùng 1 và 2 sang 1 vùng tạm
-Filter unique vùng này

Vậy là xong vì nếu có 3 vùng, 5 vùng mà bác làm thế thì chỉ tổ làm cho công việc rắc rối thêm

Chưa kiểm chưa tin; Này nha:
Mình chép 1,5 lần thôi í chứ; bạn phải chép 2 lần mà;
Công đoạn chép tốn hay AdvcedFilter tốn xăng hơn thì mình chưa có thông tin!

Một mặt vì mình rất thấm ý câu lệnh này:
Mã:
[B][COLOR="Purple"]Set RngFiltered = RngFilter.SpecialCells(xlCellTypeVisible) [/COLOR][/B]
nên muốn điệp khúc nó í mà!

Chúc vui, Hai, ba , ta cụng lí đi!!
 
Em cũng không biết nữa, nhưng em thấy code em ngắn có tí tẹo và ít rắc rối hơn (dể hiểu)
PHP:
Sub Loc()
    Er1 = [A65536].End(xlUp).Row
    Range("A1:A" & Er1).Copy Destination:=[E1]
    Er2 = Sheet1.[A65536].End(xlUp).Row
    Er3 = [E65536].End(xlUp).Row + 1
    Sheet1.Range("A2:A" & Er2).Copy Destination:=Range("E" & Er3)
    Er4 = Sheet2.[E65536].End(xlUp).Row
    Range("E1:E" & Er4).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    Range("E1:E" & Er4).SpecialCells(xlCellTypeVisible).Copy Destination:=[F1]
    ActiveSheet.ShowAllData
    Columns("E:E").ClearContents
    Range("F1").Select
End Sub
 

File đính kèm

Web KT

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

Back
Top Bottom