返回列表 上一主題 發帖

[發問] 資料庫比對的問題

[發問] 資料庫比對的問題

各位大大,我想請問一下,若是我有A跟B資料庫,假設我想判斷B資料庫中的A欄位(以A資料庫為主),
少了哪些或者多了哪些資訊,以此類推,在A資料庫中的B欄位C欄位,請問我該如何解決這樣的問題呢!?

附上EXCEL檔,若是可以希望能夠用ACCESS解決或者使用巨集

目前知道的笨方法就是先依照遞增或遞減排序,貼到EXCEL後在加上函數判斷兩筆資料的各個欄位,但我相信電腦一定有更快的方式 ^^",先謝謝各位高手 ^_^


A與B資料庫.rar (29.54 KB)

回復 13# fusayloveme

不會啦
因為你問的問題
之前我就問過類似的了= ="
只是 我問的比較亂點..
你只是單純 A B 比對..
之前我問的是 A B 比對後 如果 確定是我要的  就從其他檔案內 代入數據
如 AAA.xls 和  BBB.xls 比對後
在CCC.xls 內 代入 甲甲甲.xls的儲存格數據..

這方法適用於  表格資料的轉換
有些原先設定的表格  填入數據後
直接  代入到想要的儲存格內並且去判斷格式是否正確..

或者 從 儲存格 比對後把資料 轉成 我要的型態..+.+

TOP

回復 11# mark15jill

mark大大,太棒嚕,這個周末有空再來修改一下,有不懂的問題再請教您,非常感謝您 ^_^

TOP

回復 11# mark15jill

非常感謝!! 晚點來試試看,目前突然接到不小的工作量,晚點來測試看看 ^_^

TOP

回復 8# fusayloveme

附帶一份比較容易的邏輯..

用C資料庫(sheet3) 分別列出相同與不同的判斷
  1. Sub ow()
  2.     Sheets("A資料庫").Select
  3.     Range("a3", "C65535").Select
  4.     Selection.Copy
  5.     Sheets("Sheet3").Select
  6.     Range("m3").Select
  7.     ActiveSheet.Paste
  8.    
  9.     Sheets("B資料庫").Select
  10.     Range("a3", "C65535").Select
  11.     Selection.Copy
  12.     Sheets("Sheet3").Select
  13.     Range("P3").Select
  14.     ActiveSheet.Paste
  15.         Range("A3", "F65535").Value = Range("M3", "R65535").Value
  16.    
  17. If Range("a3").Value <> "" Then
  18.     For xk = 3 To 65536
  19.    
  20.         
  21.         If Range("D" & xk).Value <> Range("A" & xk).Value Then
  22.                         Range("h" & xk).Value = "A欄位  比對失敗"
  23.                         Range("A" & xk).Select
  24.                             With Selection.Interior
  25.                                 .Pattern = xlSolid
  26.                                 .PatternColorIndex = xlAutomatic
  27.                                 .Color = 65535
  28.                                 .TintAndShade = 0
  29.                                 .PatternTintAndShade = 0
  30.                             End With
  31.                         Range("D" & xk).Select
  32.                             With Selection.Interior
  33.                                 .Pattern = xlSolid
  34.                                 .PatternColorIndex = xlAutomatic
  35.                                 .Color = 65535
  36.                                 .TintAndShade = 0
  37.                                 .PatternTintAndShade = 0
  38.                             End With
  39.         End If
  40.         If Range("P" & xk).Value = Range("m" & xk).Value Then
  41.             'Range("H" & XK).Value = "A欄位比對成功"
  42.             Range("A" & xk, "F" & xk).Value = Range("M" & xk, "R" & xk).Value
  43.             If Range("D" & xk).Value = Range("a" & xk).Value Then
  44.                 If Range("E" & xk).Value = Range("b" & xk).Value Then
  45.                     If Range("f" & xk).Value = Range("c" & xk).Value Then
  46.                         Range("h" & xk).Value = "比對成功"
  47.                     End If
  48.                     If Range("f" & xk).Value <> Range("c" & xk).Value Then
  49.                         Range("h" & xk).Value = "C欄位  比對失敗"
  50.                         Range("F" & xk).Select
  51.                             With Selection.Interior
  52.                                 .Pattern = xlSolid
  53.                                 .PatternColorIndex = xlAutomatic
  54.                                 .Color = 65535
  55.                                 .TintAndShade = 0
  56.                                 .PatternTintAndShade = 0
  57.                             End With
  58.                         Range("C" & xk).Select
  59.                             With Selection.Interior
  60.                                 .Pattern = xlSolid
  61.                                 .PatternColorIndex = xlAutomatic
  62.                                 .Color = 65535
  63.                                 .TintAndShade = 0
  64.                                 .PatternTintAndShade = 0
  65.                             End With
  66.                     
  67.                     End If
  68.                 End If
  69.                 If Range("e" & xk).Value <> Range("b" & xk).Value Then
  70.                         Range("h" & xk).Value = "B欄位  比對失敗"
  71.                         Range("E" & xk).Select
  72.                             With Selection.Interior
  73.                                 .Pattern = xlSolid
  74.                                 .PatternColorIndex = xlAutomatic
  75.                                 .Color = 65535
  76.                                 .TintAndShade = 0
  77.                                 .PatternTintAndShade = 0
  78.                             End With
  79.                         Range("B" & xk).Select
  80.                             With Selection.Interior
  81.                                 .Pattern = xlSolid
  82.                                 .PatternColorIndex = xlAutomatic
  83.                                 .Color = 65535
  84.                                 .TintAndShade = 0
  85.                                 .PatternTintAndShade = 0
  86.                             End With
  87.                         
  88.                 End If
  89.             End If
  90.    
  91.         End If
  92.         'If Range("P" & XK).Value <> Range("m" & XK).Value Then
  93.         '    Range("H" & XK).Value = "A欄位  比對失敗"
  94.         '    Range("A" & XK, "F" & XK).Value = Range("M" & XK, "R" & XK).Value
  95.         'End If
  96.    
  97.    
  98.     Next xk
  99. End If
  100.         Columns("M:R").Select
  101.         Range("M2").Activate
  102.         Selection.Delete Shift:=xlToLeft


  103. End Sub
複製代碼

TOP

回復 9# register313

感謝R大的幫忙,衷心的謝謝您 ^_^

TOP

回復 7# fusayloveme
A資料庫(B資料庫)之A欄位沒有重覆值
  1. Sub xx()
  2. Sheets("比對結果").[A2:D65536] = ""
  3. Sheets("A資料庫").Activate
  4. Set SourceA = Sheets("A資料庫").Range([A2], [A65536].End(xlUp))
  5. Sheets("B資料庫").Activate
  6. Set SourceB = Sheets("B資料庫").Range([A2], [A65536].End(xlUp))
  7. Sheets("比對結果").Activate
  8. Sheets("比對結果").[A2:D65536] = ""
  9. For Each A In SourceA
  10.   X = Application.CountIf(SourceB, A) - Application.CountIf(SourceA, A)
  11.   If X = 0 Then
  12.      Sheets("比對結果").[C65536].End(xlUp).Offset(1, 0) = A
  13.   Else
  14.      Sheets("比對結果").[B65536].End(xlUp).Offset(1, 0) = A
  15.   End If
  16. Next A
  17. For Each B In SourceB
  18.   X = Application.CountIf(SourceB, B) - Application.CountIf(SourceA, B)
  19.   If X = 1 Then
  20.      Sheets("比對結果").[A65536].End(xlUp).Offset(1, 0) = B
  21.   End If
  22. Next B
  23. End Sub
複製代碼

TOP

回復 6# mark15jill

先謝謝大大的熱心 ^_^,由於可能會有重覆的,所以判斷條件可能要再謹慎,讓其判斷的特性成為唯一,這樣比對會比較有意義,否則就如同二樓R大所說
會無法比對,因為可能A資料庫內的EXXXXX,但B資料庫內同時有五筆EXXXXX,所以比對後,無法互相比對,導致全部為不符合,反之A資料若筆數較少也會發生類似情況,
所以最好的辦法先找出其唯一性,做為比對的先決條件比較好,這是我最近在做資料庫的心得,感覺上還是被打回原形>< 哀

TOP

本帖最後由 fusayloveme 於 2012-3-12 17:46 編輯

回復 5# register313

我能理解您的意思,當初也是在想因為兩筆資料沒有唯一性,所以無法去比對,只利用共通性比對的話,條件不足夠讓比對成立,
這也是我目前在做關聯資料庫的困擾,不過,還是想請問大大,若假設[ControlNO]的情況是唯一性的話,有辦法像我3F所提供的
"A與B資料庫範例"這樣做出來嗎? 謝謝大大的熱心 ^_^

A攔、C攔及E攔的比對,主要是由A攔決定,A攔確認對了才會進行下一步的C攔、E攔及後面欄位的比對,大概是朝向這樣的方向~

TOP

我的作法
新創 資料庫  C
以A資料庫為主  去比對 B資料庫
用循環的方式

if sheet1.range("a1").value <> sheet2.range("a1").value then
     sheet3.range("a1").value = "不相同"
endif

TOP

        靜思自在 : 犯錯出懺悔心,才能清淨無煩惱。
返回列表 上一主題