về lọc dữ liệu trùng

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài
mình thấy nó chỉ chuột vào đây ISup abc ()
Bài đã được tự động gộp:

bạn làm file excel rồi gửi cho mình xin thì tốt quá, mình ko biết gì về cái món này giờ tuổi nhiều mò mẫm mệt quá
Đây bạn. Nhấn alt + F8 để chạy
Cái "cốt" trong file của @HieuCD nhé bạn
 

File đính kèm

  • lọc tổng hợp(3).xlsb
    17.6 KB · Đọc: 5
ko biết có phải tại máy mình ko nhỉ nó vẫn báo lỗi thế bạn ạ
Bài đã được tự động gộp:

hay do mình đang mở nhiều file excel?
Bài đã được tự động gộp:

mình làm lại alt + f8 thì nó ra thế này
Bài đã được tự động gộp:

thông cảm mình nhé, phiền bạn quá
 

File đính kèm

  • Ảnh chụp màn hình 2024-06-13 213926.png
    Ảnh chụp màn hình 2024-06-13 213926.png
    94.5 KB · Đọc: 10
  • Ảnh chụp màn hình 2024-06-13 214601.png
    Ảnh chụp màn hình 2024-06-13 214601.png
    60.9 KB · Đọc: 10
Lần chỉnh sửa cuối:
ko biết có phải tại máy mình ko nhỉ nó vẫn báo lỗi thế bạn ạ
Bài đã được tự động gộp:

hay do mình đang mở nhiều file excel?
Bài đã được tự động gộp:

mình làm lại alt + f8 thì nó ra thế này
Bài đã được tự động gộp:

thông cảm mình nhé, phiền bạn quá
Tắt Excel --> mở lại --> chọn Enable macro...
 
mình không hiểu bạn ạ? thực sự là mình rất cần mình ko biết gì về VBA gì cả mình chỉ muốn nhờ bạn nào làm giúp cho mình file excel để mình lọc thôi nhưng cái ý tưởng cũng khó diễn đạt nên mình viết hơi dài thôi
 
Lần chỉnh sửa cuối:
@nguyenduylong1974

Bạn dùng excel phiên bản nào?
Khi mở file có thấy yêu cầu Enable macro... hay không?
có bạn ạ và mình cũng làm theo hướng dẫn bật macro
Bài đã được tự động gộp:

Có lẽ bác là 1974, và bác diễn đạt cứ như là toán đố ấy, em vẫn chưa hiểu bài toán * này!!! Bác càng giải thích càng nâng mức độ khó lên thêm nữa.
Do đó, em đoán mò 3 cột này 7 9 10:

View attachment 301696
3 cột 7.9.10 có các hàng bôi màu vàng đạt yêu cầu (có xuất hiện 0x hoặc 1x , 2x) và mục đích là lọc tìm trong rất nhiều tổ hợp 3 cột một tổ hợp có các hàng được bôi màu vàng nhiều nhất. (mình đã ẩn đi cột 8 để sếp 3 cột 7.9.10 gần nhau cho dễ nhìn)
 

File đính kèm

  • Ảnh chụp màn hình 2024-06-14 120727.png
    Ảnh chụp màn hình 2024-06-14 120727.png
    252.6 KB · Đọc: 9
Lần chỉnh sửa cuối:
Đến đây thì bó tay.
Có lẽ tốt nhất bạn dịch nội dung cảnh báo để lựa chọn cách

xử lý cho ph

Đến đây thì bó tay.
Có lẽ tốt nhất bạn dịch nội dung cảnh báo để lựa chọn cách xử lý cho phù hợp!!
Alo bạn CHAOQUAY, mình làm được rồi bạn ạ, mình phải nhờ đứa cháu nó mở chặn ở cấu hình máy tính chứ ko phải chỉ ở excel , tiện cái file bạn đã làm cho mình, mình muốn nhờ bạn làm thêm cho mình 1 file tổ hợp của 2 cột thay cho 3 cột bạn đã làm có được không , mình cảm ơn
 
Chạy code tô màu 3 cột thỏa điều kiện
Mã:
Sub abc()
  Dim arr(), res(1 To 3), sR&, sC&, i&, j&, j2&, j3&, k&, rMax&
  Const dk$ = "0x1x2x"
 
  i = Range("A1000000").End(xlUp).Row
  j = Range("A1").End(xlToRight).Column
  arr = Range("B2", Cells(i, j)).Value
  sR = UBound(arr): sC = UBound(arr, 2)
  For j = 1 To sC
    For j2 = j + 1 To sC
      For j3 = j2 + 1 To sC
        k = 0
        For i = 1 To sR
          If InStr(1, dk, arr(i, j)) Or InStr(1, dk, arr(i, j2)) Or InStr(1, dk, arr(i, j3)) Then k = k + 1
        Next i
        If rMax < k Then
          rMax = k
          res(1) = j:     res(2) = j2:   res(3) = j3
        End If
      Next j3
    Next j2
  Next j

  Range("B1").Resize(, sC).Interior.Pattern = xlNone
  For j = 1 To 3
    Cells(1, res(j) + 1).Interior.Color = 49407
  Next j
  MsgBox ("So Dong Thoa Dieu Kien La:  " & rMax)
End Sub
bạn làm thêm giúp mình cho 2 cột thay cho 3 cột với nhé
 
Alo bạn CHAOQUAY, mình làm được rồi bạn ạ, mình phải nhờ đứa cháu nó mở chặn ở cấu hình máy tính chứ ko phải chỉ ở excel , tiện cái file bạn đã làm cho mình, mình muốn nhờ bạn làm thêm cho mình 1 file tổ hợp của 2 cột thay cho 3 cột bạn đã làm có được không , mình cảm ơn
Chốt lại là mục tiêu mong muốn của bạn là gì?
 
Chốt lại là mục tiêu mong muốn của bạn là gì?
Mình đã mở được flie bạn làm cho mình 3 cột rồi, nếu bạn có thể làm giúp mình thêm được 1 file như hôm trước bạn làm cho mình nhưng lọc với 2 cột thì tốt quá
Bài đã được tự động gộp:

hôm trước nhờ các bạn trên này làm 3 cột vì định làm thủ công 2 cột ghép với nhau nhưng nó chiếm nhiều cột quá nên muốn nhờ bạn giúp nốt lọc với 2 cột
 
Bạn CHAOQUAY hộ mình thêm lần nữa nhé, cảm ơn bạn
Chép đoạn code dưới vào file của bạn rồi test

Số lượng cột có thể thay đổi tại dòng chỉ dẫn
Nếu số lượng dòng, cột yêu cầu là lớn, có thể code sẽ chạy chậm, cái này chưa test nhé

Kết quả điền vào sheet1, R1
Mã:
Option Explicit

Sub tohop()
Dim Nguon
Dim mTK() As Long
Dim slCot
Dim mTam
Dim chap, trs, maxGT
Dim Kq
Dim rws, cls
Dim i, j, k, x, z, t

Nguon = Sheet1.Range("B2", Sheet1.Range("P2").End(xlDown))
rws = UBound(Nguon)
cls = UBound(Nguon, 2)
mTam = Array("0x", "1x", "2x") '<<<----- Nhap so muon loc vao day

ReDim mTK(1 To rws, 1 To cls)
For i = 1 To rws
    For j = 1 To cls
        k = Filter(mTam, Nguon(i, j))
        If UBound(k) = 0 Then mTK(i, j) = 1
    Next j
Next i

'************************************************
slCot = 3 '<<<----- Nhap so cot mong muon vao day
If slCot < 2 Or slCot >= cls Then
    MsgBox "Nhap lai so luong cot"
    Exit Sub
End If
'************************************************

With CreateObject("Scripting.Dictionary")
    ReDim k(slCot)
    k(1) = 1
    .Item(0) = k
    For chap = 2 To slCot
        If chap = slCot Then maxGT = 0
        mTam = .Items
        .RemoveAll
        For i = 0 To UBound(mTam)
            k = mTam(i)(chap - 1)
            For j = k + 1 To cls - (slCot - chap)
                mTam(i)(chap) = j
                trs = 0
                For x = 1 To rws
                    t = 0
                    For z = 1 To chap
                        t = t + mTK(x, mTam(i)(z))
                    Next z
                    If t Then trs = trs + 1
                Next x
                mTam(i)(0) = trs
                .Item(.Count) = mTam(i)
                If chap = slCot Then
                    If maxGT < trs Then maxGT = trs
                End If
            Next j
        Next i
    Next chap
    For Each k In .Keys
        If CLng(.Item(k)(0)) < maxGT Then .Remove k
    Next k
    ReDim Kq(1 To .Count, 1 To slCot)
    For i = 0 To .Count - 1
        For j = 1 To slCot
            Kq(i + 1, j) = .Items()(i)(j)
        Next j
    Next i
End With

With Sheet1
    .Range("R1").Resize(UBound(Kq) + 1, cls).Clear
    .Range("R1") = maxGT
    .Range("R2").Resize(UBound(Kq), UBound(Kq, 2)) = Kq
End With
End Sub
 
Lần chỉnh sửa cuối:
Chép đoạn code dưới vào file của bạn rồi test

Số lượng cột có thể thay đổi tại dòng chỉ dẫn
Nếu số lượng dòng, cột yêu cầu là lớn, có thể code sẽ chạy chậm, cái này chưa test nhé

Kết quả điền vào sheet1, R1
Mã:
Option Explicit

Sub tohop()
Dim Nguon
Dim mTK() As Long
Dim slCot
Dim mTam
Dim chap, trs, maxGT
Dim Kq
Dim rws, cls
Dim i, j, k, x, z, t

Nguon = Sheet1.Range("B2", Sheet1.Range("P2").End(xlDown))
rws = UBound(Nguon)
cls = UBound(Nguon, 2)
mTam = Array("0x", "1x", "2x") '<<<----- Nhap so muon loc vao day

ReDim mTK(1 To rws, 1 To cls)
For i = 1 To rws
    For j = 1 To cls
        k = Filter(mTam, Nguon(i, j))
        If UBound(k) = 0 Then mTK(i, j) = 1
    Next j
Next i

'************************************************
slCot = 3 '<<<----- Nhap so cot mong muon vao day
If slCot < 2 Or slCot >= cls Then
    MsgBox "Nhap lai so luong cot"
    Exit Sub
End If
'************************************************

With CreateObject("Scripting.Dictionary")
    ReDim k(slCot)
    k(1) = 1
    .Item(0) = k
    For chap = 2 To slCot
        If chap = slCot Then maxGT = 0
        mTam = .Items
        .RemoveAll
        For i = 0 To UBound(mTam)
            k = mTam(i)(chap - 1)
            For j = k + 1 To cls - (slCot - chap)
                mTam(i)(chap) = j
                trs = 0
                For x = 1 To rws
                    t = 0
                    For z = 1 To chap
                        t = t + mTK(x, mTam(i)(z))
                    Next z
                    If t Then trs = trs + 1
                Next x
                mTam(i)(0) = trs
                .Item(.Count) = mTam(i)
                If chap = slCot Then
                    If maxGT < trs Then maxGT = trs
                End If
            Next j
        Next i
    Next chap
    For Each k In .Keys
        If CLng(.Item(k)(0)) < maxGT Then .Remove k
    Next k
    ReDim Kq(1 To .Count, 1 To slCot)
    For i = 0 To .Count - 1
        For j = 1 To slCot
            Kq(i + 1, j) = .Items()(i)(j)
        Next j
    Next i
End With

With Sheet1
    .Range("R1").Resize(UBound(Kq) + 1, cls).Clear
    .Range("R1") = maxGT
    .Range("R2").Resize(UBound(Kq), UBound(Kq, 2)) = Kq
End With
End Sub
mình cảm ơn bạn nhé
 
Web KT
Back
Top Bottom