Tìm dòng có mặt hàng không nằm trong danh mục bằng code VBA (1 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

thao nguyen01

Thành viên thường trực
Tham gia
8/12/19
Bài viết
250
Được thích
32
Kính gửi anh/chị trên diễn đàn,
Em đang vướng vấn đề: Em muốn tìm dòng có mặt hàng không nằm trong danh mục cho sẵn. Em có mô tả vấn đề trong file ạ.
Anh chị xem và hỗ trợ giúp em với ạ. Em cảm ơn nhiều ạ.
 

File đính kèm

Kính gửi anh/chị trên diễn đàn,
Em đang vướng vấn đề: Em muốn tìm dòng có mặt hàng không nằm trong danh mục cho sẵn. Em có mô tả vấn đề trong file ạ.
Anh chị xem và hỗ trợ giúp em với ạ. Em cảm ơn nhiều ạ.
Bạn này dùng khá nhiều về vba, vào diễn đàn đến năm thứ 6 rồi mà sao không chịu khó học để tự làm nhỉ. Có lẽ cứ đi nhờ đến khi nào không đi làm nữa mất thôi.
 

File đính kèm

Upvote 0
Tạm thời tham khảo con macro cù lần này trong file thực tế của bạn xem sao:
PHP:
Sub InStr_()
 Dim DMMH As String, Tmp As String:         Const DF As String = ","
 Dim Cls As Range
 Dim VTr As Integer, Rws As Long, J As Integer
 
 For Each Cls In [F2].CurrentRegion.Offset(1)
    DMMH = DMMH & Cls.Value
 Next Cls
 Rws = [C2].CurrentRegion.Rows.Count
 For Each Cls In Range([C2], [C2].End(xlDown))
    For J = 1 To Len(Cls.Value)
        Tmp = Mid(Cls.Value, J, 1)
        If Tmp <> DF And Tmp <> " " Then
            VTr = InStr(DMMH, Tmp)
            If VTr < 1 Then
                MsgBox Tmp, , Cls.Value
            End If
        End If
    Next J
 Next Cls
End Sub
 
Upvote 0
Bạn này dùng khá nhiều về vba, vào diễn đàn đến năm thứ 6 rồi mà sao không chịu khó học để tự làm nhỉ. Có lẽ cứ đi nhờ đến khi nào không đi làm nữa mất thôi.
Dạ, em cảm ơn anh nhiều ạ.
Bài đã được tự động gộp:

Tạm thời tham khảo con macro cù lần này trong file thực tế của bạn xem sao:
PHP:
Sub InStr_()
 Dim DMMH As String, Tmp As String:         Const DF As String = ","
 Dim Cls As Range
 Dim VTr As Integer, Rws As Long, J As Integer
 
 For Each Cls In [F2].CurrentRegion.Offset(1)
    DMMH = DMMH & Cls.Value
 Next Cls
 Rws = [C2].CurrentRegion.Rows.Count
 For Each Cls In Range([C2], [C2].End(xlDown))
    For J = 1 To Len(Cls.Value)
        Tmp = Mid(Cls.Value, J, 1)
        If Tmp <> DF And Tmp <> " " Then
            VTr = InStr(DMMH, Tmp)
            If VTr < 1 Then
                MsgBox Tmp, , Cls.Value
            End If
        End If
    Next J
 Next Cls
End Sub
Dạ, con cảm ơn Bác ạ.
 
Upvote 0
PHP:
Sub Replace_Copilot()  
  Dim Cls As Range, RngF As Range, CellF As Range 
  Dim Tmp As String:                          Dim Rws As Long, W As Integer
  Rws = [C2].CurrentRegion.Rows.Count  
  ReDim Arr(1 To Rws, 1 To 3):      
  [J4].Resize(Rws, 3).Value = Arr() 
  Arr(1, 1) = [A1].Value:                     Arr(1, 2) = [B1].Value    
  Arr(1, 3) = [C1].Value:                     W = 1    
 Set RngF = Range("F2", Range("F2").End(xlDown)) ' Danh Muc Cân Loai Bo'  
 For Each Cls In Range("C2", Range("C2").End(xlDown)) 
       Tmp = Cls.Value  
       For Each CellF In RngF   
            Tmp = Replace(Tmp, CellF.Value, "")
       Next CellF        
      Tmp = Replace(Tmp, ",", "")   
     If Len(Trim(Tmp)) > 0 Then   
         W = W + 1:                                    Arr(W, 1) = Cls.Offset(, -2).Value   
         Arr(W, 2) = Cls.Offset(, -1).Value:  Arr(W, 3) = Cls.Value
     End If 
   Next Cls  
   If W Then    
      Randomize:                              [J4].Resize(W, 3).Value = Arr()  
      [J4:L4].Interior.ColorIndex = 34 + 9 * Rnd() \ 1 
   End If
End Sub
 
Upvote 0
Bài này mà dùng search mảng thì không hiệu quả lắm.
Cách chính thức là dùng ado code. Sql đại khái như vầy
SELECT maKey IN bang1 in WHERE maKey NOT IN
(SELECT maKey IN bang2)

Thực sự thì dùng Power Query hoặc dùng các công thức lọc mảng của 365 là thiện nghệ nhất.
 
Upvote 0
PHP:
Sub Replace_Copilot() 
  Dim Cls As Range, RngF As Range, CellF As Range
  Dim Tmp As String:                          Dim Rws As Long, W As Integer
  Rws = [C2].CurrentRegion.Rows.Count 
  ReDim Arr(1 To Rws, 1 To 3):     
  [J4].Resize(Rws, 3).Value = Arr()
  Arr(1, 1) = [A1].Value:                     Arr(1, 2) = [B1].Value   
  Arr(1, 3) = [C1].Value:                     W = 1   
 Set RngF = Range("F2", Range("F2").End(xlDown)) ' Danh Muc Cân Loai Bo' 
 For Each Cls In Range("C2", Range("C2").End(xlDown))
       Tmp = Cls.Value 
       For Each CellF In RngF  
            Tmp = Replace(Tmp, CellF.Value, "")
       Next CellF       
      Tmp = Replace(Tmp, ",", "")  
     If Len(Trim(Tmp)) > 0 Then  
         W = W + 1:                                    Arr(W, 1) = Cls.Offset(, -2).Value  
         Arr(W, 2) = Cls.Offset(, -1).Value:  Arr(W, 3) = Cls.Value
     End If
   Next Cls 
   If W Then   
      Randomize:                              [J4].Resize(W, 3).Value = Arr() 
      [J4:L4].Interior.ColorIndex = 34 + 9 * Rnd() \ 1
   End If
End Sub
Dạ, con cảm ơn ạ
 
Upvote 0
Web KT

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

Back
Top Bottom