Board logo

標題: [發問] 不同資料比字串比較 [打印本頁]

作者: nyboy    時間: 2018-2-4 13:49     標題: 不同資料比字串比較

請問有前輩們能幫我解答一下嗎?
小弟是程式(VBA)新手,目前想寫一個小程式來檢查來源資料是否有出現例外字串
請見附件test_compare.rar。
想比對Sheet1 的 C 欄字串是否有跟vendorcode上面任何一個字串都不符合的,要是有不符合的就寫在comp_rslt資料表。
目前sheet1的C11與C12都是應該被程式發現並印在comp_rslt的字串,但是執行之後都會印出任一個字串(不應該被印出來因為vendorcode上有)
請問是哪邊弄錯了呢可否給小弟一些提示,感謝!
  1. Sub compare()
  2. '

  3. '來源資料的欄位數
  4. k = Sheets("sheet1").Cells(104689, 3).End(xlUp).Row

  5. '比較資料的欄位數
  6. p = Sheets("vendorcode").Cells(104689, 1).End(xlUp).Row



  7. For n = 2 To k
  8.   C = 1
  9.        For m = 1 To p
  10. '要是來源資料有哪一欄和比較資料不同,就列在比較結果資料表comp_rslt中

  11.   If InStr(Sheets("sheet1").Cells(n, 3), Sheets("vendorcode").Cells(m, 1)) = 0 Then
  12.         Sheets("comp_rslt").Cells(C, 1).Value = Sheets("sheet1").Cells(n, 3)

  13.               


  14.    End If
  15.     C = C + 1
  16.     Next
  17.   Next

  18. End Sub
複製代碼

作者: GBKEE    時間: 2018-2-4 15:02

回復 1# nyboy
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Ar As Variant, E As Range, St As String
  4.     With Sheets("vendorcode")
  5.         Ar = Application.Transpose(.Range("a1", .Range("a1").End(xlDown)).Value)  ' Application.Transpose 轉置
  6.         Ar = "," & Join(Ar, ",") & ","    '一維陣列轉為字串
  7.     End With
  8.     With Sheets("SHEET1")
  9.         For Each E In .Range("C2", .Range("C2").End(xlDown))
  10.             If InStr(Ar, "," & E & ",") = 0 Then St = St & "," & E  '記錄在字串中
  11.         Next
  12.     End With
  13.     If St <> "" Then
  14.         Ar = Split(Mid(St, 2), ",")         '字串轉為一維陣列
  15.         Sheets("comp_rslt").Range("A1").Resize(UBound(Ar) + 1) = Application.Transpose(Ar)
  16.     End If
  17. End Sub
複製代碼

作者: nyboy    時間: 2018-2-4 16:36

可以了 太感謝版主!!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)