返回列表 上一主題 發帖

[發問] 請問VBA可以做到兩檔案比對後再產生另一檔案的比對結果嗎?

回復 6# GBKEE


    謝謝版大~~~

抱歉小妹才疏學淺...... 請問一下要怎麼使用才能做比對呢?

我將語法複製到模組中 但是如何才能正確使用?

目前偵錯停在
With Workbooks("A.xls").Sheets(1)

對VBA很有興趣但是未開竅 目前腳步很慢尚停留在函數階段 也請各位大師們多多見諒我問的笨問題..

TOP

回復 4# vocolboy
  1. Option Explicit
  2. Sub Ex()
  3.     Dim d As Object, i As Variant, S  As Variant
  4.     Set d = CreateObject("scripting.dictionary")
  5.     i = 1
  6.     With Workbooks("A.xls").Sheets(1)
  7.         Do While .Cells(i, "e") <> ""
  8.             d(.Cells(i, "e").Value) = .Cells(i, "A").Value
  9.             i = i + 1
  10.         Loop
  11.     End With
  12.      i = 1
  13.     With Workbooks("B.xls").Sheets(1)
  14.         Do While .Cells(i, "J") <> ""
  15.            S = Join(Application.Transpose(Application.Transpose(.Range("A" & i & ":J" & i))), ",")
  16.            If d.Exists(.Cells(i, "J").Value) Then
  17.                 S = S & "," & d(.Cells(i, "J").Value)
  18.                 d(.Cells(i, "J").Value) = Split(S, ",")
  19.            Else
  20.                 d(.Cells(i, "J").Value) = Split(S & ",No Data", ",")
  21.                 S = d(.Cells(i, "J").Value)
  22.            
  23.            End If
  24.             i = i + 1
  25.         Loop
  26.     End With
  27.     For Each i In d.keys
  28.         If InStr(i, "-") Then If Mid(i, InStr(i, "-"), 2) <> "-1" Then d.Remove i        '可忽略"-"的步驟
  29.     Next
  30.     With Workbooks("C.xls").Sheets(1)
  31.         .Cells.Clear
  32.         S = Application.Transpose(Application.Transpose(d.ITEMS))
  33.         .[A1].Resize(UBound(S, 1), UBound(S, 2)) = S
  34.     End With
  35. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 4# vocolboy


    哈囉~~謝謝vocolboy ~

請問一下 是否可以有一個檔案 開啟以後 讓我按鈕選擇載入兩個檔案比對呢?

例如

按鈕一  請選擇檔案
按鈕二  請選擇檔案
按鈕三  開始比對

TOP

本帖最後由 vocolboy 於 2013-7-25 14:48 編輯

回復 1# happycoccolin

我也是剛學的不能下載付件直接從你上述的寫

Sub 比對()
Set d = CreateObject("Scripting.Dictionary")          '字典
With Workbooks("A.xls").Sheets(1)                       'with 報名名稱.工作表名稱
  For Each a In .Range(.[E2], .[E65536].End(xlUp))
   d(a & "") = Array(a.Offset(, -4).Value)
  Next
End With
With Workbooks("B.xls").Sheets(1)                                       
  For Each a In .Range(.[J2], .[J65536].End(xlUp))
    a.Offset(, 1).Resize(, 1).Value = d(a & "")
  Next
End With
End Sub


這個結果並不會產生到C新的上
他會match在B裡面
我想這只是個複製貼上小問題@@

TOP

回復 2# happycoccolin


    :$ 若有空請大家看看是否可以達成~~~謝謝!!!!!

ABC.zip (19.03 KB)

TOP

忘了附檔.....稍後附上檔案~

TOP

        靜思自在 : 好事要提得起,是非要放得下,成就別人即是成就自己。
返回列表 上一主題