Board logo

標題: [發問] excel 利用vba比對兩個活頁簿資料 [打印本頁]

作者: kaki    時間: 2011-8-31 21:56     標題: excel 利用vba比對兩個活頁簿資料

工作需要,想學vba ,麻煩高手幫忙解答一下
請問一下,我 的EXCEL有兩個活頁簿, (總表) ( 123 )
總表:   a:姓名  b:身份證   c:生日    d:電話
123:   a:身份證  b:生日
如何將(123)的身份證與(總表)身份證比對,
如果(123)的身份證與(總表)身份證,一樣,
則將(123)的生日(欄位),填到(總表)生日(欄位).

(總表約有 3000筆資料)
(123約有 500筆資料)
作者: dechiuan999    時間: 2011-9-1 06:32

你好:
  下列語法請試試是否合適
Sub aa()

Dim mDic As Object
Dim mWk1 As Workbook
Dim mSht1 As Worksheet
Dim mRng As Range
Dim E As Range

Set mDic = CreateObject("Scripting.Dictionary")
Set mWk1 = Workbooks("總表")
With mWk1
    Set mSht1 = Worksheets(1)
    With mSht1
        Set mRng = .Range("b2:b" & .[a65536].End(xlUp).Row)
    End With
   
    For Each E In mRng
        If mDic.Exists(E.Value) = False Then
            mDic(E.Value) = E.Offset(, 1).Value
        End If
    Next
End With

With Workbooks.Open(ThisWorkbook.Path & "\" & 123 & ".xls")

With Sheets(1)

    For Each E In .Range(.[A2], .[A2].End(xlDown))

        E.Offset(, 1) = mDic(E.Value)

    Next

End With

.Close

End With

End Sub
作者: GBKEE    時間: 2011-9-1 06:59

回復 2# dechiuan999
注意With裡的敘述要加  .   
''''''''''''''''''''''''''''''''''''
With
Set mWk1 = Workbooks("總表")
   With mWk1
     Set mSht1 = .Worksheets(1)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
With Workbooks.Open(ThisWorkbook.Path & "\" & 123 & ".xls")
With .Sheets(1)
作者: dechiuan999    時間: 2011-9-1 09:46

謝謝版主大大。
小弟在語法上
會再多加注意。
作者: kaki    時間: 2011-9-1 11:39

還是不行,
不行用迴圈寫 VBA嗎,
作者: dechiuan999    時間: 2011-9-1 12:47

你好:
  小弟疏失將總表及123二者
顛倒了。
請再重試一次
Sub aa()

Dim mDic As Object
Dim mWk1 As Workbook
Dim mSht1 As Worksheet
Dim mRng As Range
Dim E As Range

Set mDic = CreateObject("Scripting.Dictionary")
Set mWk1 = Workbooks("123")
With mWk1
    Set mSht1 = .Worksheets(1)
    With mSht1
        Set mRng = .Range("a2:a" & .[a65536].End(xlUp).Row)
    End With
   
    For Each E In mRng
        If mDic.Exists(E.Value) = False Then
            mDic(E.Value) = E.Offset(, 1).Value
        End If
    Next
End With

With Workbooks.Open(ThisWorkbook.Path & "\" & "總表" & ".xls")

    With Sheets(1)

        For Each E In .Range(.[b2], .[b2].End(xlDown))

            E.Offset(, 1) = mDic(E.Value)

        Next

    End With

.Close

End With

End Sub
作者: gctsai    時間: 2011-9-7 22:35

大大:
可以請問一下
With Workbooks.Open(ThisWorkbook.Path & "\" & "總表" & ".xls")
是什麼意思嗎??
作者: dechiuan999    時間: 2011-9-8 06:07

你好:
套用至Workbooks物件時用open方法
也就是開啟一個活頁簿
你可在open的位置按f1即可
看到open方法的使用說明。
作者: gctsai    時間: 2011-9-8 21:33

大大,不好意思
執行後出現 陣列索引超出範圍??




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