返回列表 上一主題 發帖

[發問] 對比不相同的資料

回復 10# GBKEE
沒有正規方法
當我發現整欄會被認為有資料時
而且CODE函數讀取內容卻會出錯,就知道含有不可見字元
要清除它不是用delete就是用資料剖析最快
學海無涯_不恥下問

TOP

回復 9# Hsieh

謝謝Hsieh版主幫我解決困擾了。

TOP

回復 7# Hsieh 謝謝 Hsieh 板主 解答
請問 你是如何找出的 我用AscB函數找不出來

TOP

原因是你的a:d欄空格含有看不見字元
用資料剖析把文字辨識符號取消即可

學海無涯_不恥下問

TOP

回復 5# Hsieh

Hsieh 您好
謝謝你抽空幫我看程式。
可是後來用你改好的程式碼去執行,有時候仍會發生錯誤,不曉得是我操作錯誤還是程式碼有問題
我附上兩個檔案,都是一樣的程式碼,可是執行結果會有差異,麻煩Hsieh版主或各位前輩幫我看看,謝謝
正確之資料比對.zip (764.22 KB)
有問題之資料比對.zip (764.19 KB)

TOP

回復 6# GBKEE


    有文字符號'存在
用資料剖析讓'消失即可恢復正常
學海無涯_不恥下問

TOP

請各位看看4樓的附檔  工作表中僅A-D欄  會有一奇怪的現象
在列的最底端位置 按下[Ctrl+往上鍵]  第1次就會到最頂端有資料的儲存格的列位. 完全不理會中間的儲存格是否有資料
在第1列的位置 [Ctrl+往下鍵]   第1次會到有資料的儲存格的位置. 第2 次便直接會到列的最底端位置. 也完全不理會中間的儲存格是否有資料

TOP

回復 4# sping
  1. Sub 同工作表不同欄位之比對()
  2. Dim Ar(), Ay()
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set d1 = CreateObject("Scripting.Dictionary")
  5. Set d2 = CreateObject("Scripting.Dictionary")
  6. With Sheets("同工作表之比對")
  7. For Each a In .Range(.[A3], .[A65536].End(xlUp))
  8.    d(a.Text) = a.Text
  9.    d2(a.Text) = a.Text
  10. Next
  11. For Each a In .Range(.[B3], .[B65536].End(xlUp))
  12.    d1(a.Text) = a.Text
  13.    d2(a.Text) = a.Text
  14. Next
  15. ReDim Preserve Ar(s): Ar(s) = "相同Name": s = s + 1
  16. ReDim Preserve Ay(k): Ay(k) = "不同Name": k = k + 1
  17. For Each ky In d2.keys
  18.   If d.exists(ky) = True And d1.exists(ky) = True Then
  19.   ReDim Preserve Ar(s) '相同
  20.   Ar(s) = ky
  21.   s = s + 1
  22.   Else
  23.   ReDim Preserve Ay(k) '不同
  24.   Ay(k) = ky
  25.   k = k + 1
  26.   End If
  27. Next
  28. Range("c3:d65536") = ""
  29. .[c2].Resize(s, 1) = Application.Transpose(Ar)
  30. .[d2].Resize(k, 1) = Application.Transpose(Ay)
  31. End With
  32. End Sub
複製代碼
學海無涯_不恥下問

TOP

同工作表之資料比對.zip (764.28 KB) 回復 2# Hsieh

Hsieh你好
因為我也有資料比對的需求,我有依你的程式碼作了一個小更改,因為我比對的資料欄位有數字格式,也可能有文字格式,所以就將a及b欄儲存格設為「文字格式」,可是設完後比對結果就會發生錯誤,可否請版主幫我看看,謝謝。

ps如果我將a及b來欄儲存格改為「通用格式」比對就會正常,可是當資料是「0800」時就會變成「800」這樣我的資料就會比對錯誤﹞

TOP

先多謝老師,這麼多程序.要慢慢消化一下.

TOP

        靜思自在 : 有時當思無時苦,好天要積雨來糧。
返回列表 上一主題