Board logo

標題: [發問] 如何讓資料比對具有唯一性??? [打印本頁]

作者: atuan207    時間: 2011-5-20 13:51     標題: 如何讓資料比對具有唯一性???

本帖最後由 atuan207 於 2011-5-20 14:10 編輯

我用oobird大大所給的程式碼做資料庫的比對

(而目前的資料庫中不具關聯性, 因為未建立)
功能是sheet2、3當成資料庫,sheet1的A、B行各自當成一個比對資料的值
找到資料後再丟回sheet1的C、D、E、F、G行

oobird大大所提供的程式碼如下:
Sub yy()
    Dim c As Range, i%
    With Sheet1
        For i = 2 To .[a65536].End(3).Row
            Set c = Sheet2.[a:a].Find(.Cells(i, 2))
            If Not c Is Nothing Then
                .Cells(i, 3).Resize(, 2) = c(1, 2).Resize(, 2).Value
            End If
            Set c = Sheet3.[a:a].Find(.Cells(i, 1))
            If Not c Is Nothing Then
                .Cells(i, 5).Resize(, 3) = c(1, 2).Resize(, 3).Value
            End If
        Next
    End With
End Sub

自己測試發現有些問題,像如果A、B行的資料輸入錯誤,(正確值為12312),而我只輸123
當資料庫中有12311、12312,它會複製12311的資料過來,
且剛剛又測試,輸入0,資料庫中有一個資料代碼是01居然去抓這筆資料

該如何讓搜尋時每個資料都具有單一性???
一定要輸入的資料完全正確才會出現,錯誤時則空白???

請教各位大大
作者: chin15    時間: 2011-5-20 14:41

Set c = Sheet2.[a:a].Find(.Cells(i, 2))
這樣是模糊查找,查找近似的值
若你要的是精確的值
Set c = Sheet2.[a:a].Find(.Cells(i, 2),,,1)
改這樣即可
作者: GBKEE    時間: 2011-5-20 14:41

本帖最後由 GBKEE 於 2011-5-20 14:43 編輯

回復 1# atuan207
Set c = Sheet2.[a:a].Find(Cells(I, 2), LOOKAT:=xlWhole)   [儲存格內容須完全相符].
使用Find時會根據上一次的搜尋的設定來搜尋,會有這誤差是你前一次搜尋的設定  沒有 勾選 [儲存格內容須完全相符].
作者: atuan207    時間: 2011-5-20 15:58

感謝兩位大大的協助,

剛剛小弟有去搜尋一下資料,
有人提到用
{=VLOOKUP(參數A, 參數B, 參數C, 參數D)
參數A:要拿去比對的資料
參數B:要比對的表格範圍
參數C:相符時要回傳的資料「欄」索引
參數D:false表示要「完全相符」才視為相符 }
不過這好像是在excel表格中使用,

後來想到上次Hsieh大大
給小弟的程式中似乎有這樣一段

Hsieh 發表於 2011-4-25 23:24 [/quote]


但之前不懂原來那是這麼用的,
現在瞭解了
感謝大大們的協助




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