Lọc ra đơn hàng không có bên bảng 2

Liên hệ QC

NguyenthiH

Thành viên mới đăng ký
Tham gia
11/12/16
Bài viết
965
Được thích
175
Giới tính
Nữ
Chào các anh chị, em có file, trong file có 2 bảng, mong các anh chị giúp em lọc ra những PO nào mà bảng 1 có mà bảng 2 không có ạ.
 

File đính kèm

Trường hợp dã chiến, số dòng ít vậy thì làm cách thủ công, quét hết bảng, dùng Conditional Formating - Duplicate value là được rồi.
 
Cách làm làm sao anh? Em có vào Duplicate, nhưng nó không được.
 
Lọc ra luôn dùm em ở bảng em có ghi chú đó ạ.
 
Công thức cho O2
Mã:
=IF(COUNTIF($I$2:$M$26,A2),"",A2)
Kéo sang phải tới cột U rồi xuống dưới tới dòng cuối của bảng 1.
-------------
CF: chọn bảng 1 -> CF -> công thức
Mã:
=COUNTIF($I$2:$M$26,A2)=0
-> chọn mầu.
 
Dạ em cám ơn Thầy batman1, anh ongke0711.
Em có biết gì đâu, toàn nhờ Thầy, các anh chị trên DD giúp không à.
 
Chào các anh chị, em có file, trong file có 2 bảng, mong các anh chị giúp em lọc ra những PO nào mà bảng 1 có mà bảng 2 không có ạ.
Bạn có thể sử dụng VBA với 2 Function được viết trên diễn đàn
Mã:
Sub SoSanh()
  Dim sArray1, sArray2, Arr, TG As Double

  sArray1 = JoinColunm(Range("C2:G16"))
  sArray2 = JoinColunm(Range("I2:M16"))
  Arr = Compare2List(sArray1, sArray2, 2)
  Range("O2").Resize(UBound(Arr, 1)).Value = Arr

End Sub
' Ham duoc viet boi ??ö??ß?†?†µ? giaiphapexcel.com
Function JoinColunm(ParamArray Table_Array())
    Dim Tmp, Item, Arr(), n As Long, i As Long
On Error Resume Next
For i = LBound(Table_Array) To UBound(Table_Array)
    Tmp = Table_Array(i)
    If TypeOf Table_Array(i) Is Range Then
        For Each Item In Tmp
            If Item <> Empty Then
                n = n + 1
                ReDim Preserve Arr(1 To n)
                Arr(n) = Item
            End If
        Next
    Else
        n = n + 1
        ReDim Preserve Arr(1 To n)
        Arr(n) = Table_Array(i)
    End If
Next i
JoinColunm = WorksheetFunction.Transpose(Arr)
End Function
' Ham duoc viet boi anhtuan1066 dien dan giaiphapexcel.com
Function Compare2List(ByVal sArray1, ByVal sArray2, ByVal CompareMod As Long)
  Dim Dic1, Dic2, Item, Item1, Item2, TmpKeys1, TmpKeys2, Arr() As String
  Dim Tmp1 As String, Tmp2 As String, j As Long, ub As Long
  On Error Resume Next
  Set Dic1 = CreateObject("Scripting.Dictionary")
  Set Dic2 = CreateObject("Scripting.Dictionary")
  For Each Item1 In sArray1
    If CStr(Item1) <> "" Then
      Tmp1 = CStr(Item1)
      If Not Dic1.Exists(Tmp1) Then Dic1.Add Tmp1, ""
    End If
  Next
  TmpKeys1 = Dic1.Keys
  For Each Item2 In sArray2
    If CStr(Item2) <> "" Then
      Tmp2 = CStr(Item2)
      If Not Dic2.Exists(Tmp2) Then Dic2.Add Tmp2, ""
    End If
  Next
  TmpKeys2 = Dic2.Keys
  ub = IIf(Dic1.Count > Dic2.Count, Dic1.Count, Dic2.Count)
  ReDim Arr(1 To ub, 1 To 1)
  Select Case CompareMod
    Case 1
      For Each Item In TmpKeys1
        If Dic2.Exists(CStr(Item)) Then
          j = j + 1
          Arr(j, 1) = CStr(Item)
        End If
      Next
    Case 2
      For Each Item In TmpKeys1
        If Not Dic2.Exists(CStr(Item)) Then
          j = j + 1
          Arr(j, 1) = CStr(Item)
        End If
      Next
    Case 3
      For Each Item In TmpKeys2
        If Not Dic1.Exists(CStr(Item)) Then
          j = j + 1
          Arr(j, 1) = CStr(Item)
        End If
      Next
  End Select
  Compare2List = Arr
End Function
 
Chào các anh chị, em có file, trong file có 2 bảng, mong các anh chị giúp em lọc ra những PO nào mà bảng 1 có mà bảng 2 không có ạ.
Chạy code
Mã:
Sub LocDuLieuKhongTrung()
  Dim Rng As Range, Rng2 As Range, fRes As Range, Res()
  Dim sRow&, sCol&, sRow2&, sCol2&, i&, j&, k&, c&, iKey$
 
  Application.DisplayAlerts = False
  On Error Resume Next
Bang1:
  Set Rng = Application.InputBox("Chon Bang 1", Type:=8)
  If Rng Is Nothing Then MsgBox ("Phai chon Bang 1"): GoTo Bang1
  sRow = Rng.Rows.Count
  sCol = Rng.Columns.Count
Bang2:
  Set Rng2 = Application.InputBox("Chon Bang 2", Type:=8)
  If Rng2 Is Nothing Then MsgBox ("Phai chon Bang 2"): GoTo Bang2
  sRow2 = Rng2.Rows.Count
  sCol2 = Rng2.Columns.Count
KetQua:
  Set fRes = Application.InputBox("Chon Cell tra ket qua", Type:=8)
  If fRes Is Nothing Then MsgBox ("Phai chon Cell tra ket qua"): GoTo KetQua
  On Error GoTo 0
  ReDim Res(1 To sRow, 1 To sCol)
  With CreateObject("scripting.dictionary")
    For i = 1 To sRow2
      For j = 1 To sCol2
        iKey = Rng2(i, j)
        If iKey <> Empty Then .Item(iKey) = ""
      Next j
    Next i
    c = 1
    For i = 1 To sRow
      For j = 1 To sCol
        iKey = Rng(i, j)
        If iKey <> Empty Then
          If .exists(iKey) = False Then
            If k < sRow Then
              k = k + 1
            Else
              k = 1
              c = c + 1
            End If
            Res(k, c) = Rng(i, j)
          End If
        End If
      Next j
    Next i
  End With
  fRes.Resize(sRow, c) = Res
  Application.DisplayAlerts = True
End Sub
 
Cám ơn anh Hiếu nhiều, nhưng xin anh chỉnh code cho các PO nằm liền nhau thì cứ giữ nguyên như vậy.
Ví dụ trong bảng 1 có
Bảng 1Sau khi lọc thì cóMong anh chỉnh cho đúng theo thứ tự bên bảng 1 dùm ạ
PO30414PO30414
PO30415PO32280
PO32280PO30415
PO32282PO32282
 
Công thức cho O2
Mã:
=IF(COUNTIF($I$2:$M$26,A2),"",A2)
Kéo sang phải tới cột U rồi xuống dưới tới dòng cuối của bảng 1.
-------------
CF: chọn bảng 1 -> CF -> công thức
Mã:
=COUNTIF($I$2:$M$26,A2)=0
-> chọn mầu.
Ngon, bổ, rẻ là đây!
 
Cám ơn anh Hiếu nhiều, nhưng xin anh chỉnh code cho các PO nằm liền nhau thì cứ giữ nguyên như vậy.
Ví dụ trong bảng 1 có
Bảng 1Sau khi lọc thì cóMong anh chỉnh cho đúng theo thứ tự bên bảng 1 dùm ạ
PO30414PO30414
PO30415PO32280
PO32280PO30415
PO32282PO32282
Thay đổi thứ tự 2 vòng For i và For j
Mã:
Sub LocDuLieuKhongTrung()
  Dim Rng As Range, Rng2 As Range, fRes As Range, Res()
  Dim sRow&, sCol&, sRow2&, sCol2&, i&, j&, k&, c&, iKey$
 
  Application.DisplayAlerts = False
  On Error Resume Next
Bang1:
  Set Rng = Application.InputBox("Chon Bang 1", Type:=8)
  If Rng Is Nothing Then MsgBox ("Phai chon Bang 1"): GoTo Bang1
  sRow = Rng.Rows.Count
  sCol = Rng.Columns.Count
Bang2:
  Set Rng2 = Application.InputBox("Chon Bang 2", Type:=8)
  If Rng2 Is Nothing Then MsgBox ("Phai chon Bang 2"): GoTo Bang2
  sRow2 = Rng2.Rows.Count
  sCol2 = Rng2.Columns.Count
KetQua:
  Set fRes = Application.InputBox("Chon Cell tra ket qua", Type:=8)
  If fRes Is Nothing Then MsgBox ("Phai chon Cell tra ket qua"): GoTo KetQua
  On Error GoTo 0
  ReDim Res(1 To sRow, 1 To sCol)
  With CreateObject("scripting.dictionary")
    For i = 1 To sRow2
      For j = 1 To sCol2
        iKey = Rng2(i, j)
        If iKey <> Empty Then .Item(iKey) = ""
      Next j
    Next i
    c = 1
    For j = 1 To sCol
      For i = 1 To sRow
        iKey = Rng(i, j)
        If iKey <> Empty Then
          If .exists(iKey) = False Then
            If k < sRow Then
              k = k + 1
            Else
              k = 1
              c = c + 1
            End If
            Res(k, c) = Rng(i, j)
          End If
        End If
      Next i
    Next j
  End With
  fRes.Resize(sRow, c) = Res
  Application.DisplayAlerts = True
End Sub
 
Cám ơn anh Hiếu nhiều!!!!
 
Web KT

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

Back
Top Bottom