2016-09-28 79 views
0

好了 - 這已經被問多次,但再次要求最佳的解決方案:Excel中比較兩個表和更新表1

我有兩個Excel文件(不張)。第一張excel表非常龐大,接近20萬條記錄。其中一列(Gender)已損壞,我必須修復它。
我有第二個excel文件,它只有大約200個記錄 - 這些都是正確的值,這些是搞砸了。

爲如:
Master List with 200,000 records

,這是具有隻有約200條(只損壞的)正確值的文件。 enter image description here

現在我需要一個宏,我需要從200,000條記錄中找到這200條記錄(通過員工ID),並將性別值替換爲正確的值。
我發現了類似的東西here。但我不想循環200,000次記錄200次。感覺就像是性能開銷。 有沒有更好的選擇?

我想到的是一個理想的解決方案將是

  1. 循環通過200個項目,並使用每個循環
  2. 員工ID以該員工ID和主的僱員ID列做一個「查找」操作Excel中
  3. 如果找到,則更換性別列值

會有其他更好的解決辦法?任何輸入很樂意欣賞

+0

您可以看看Power Query或Microsoft Query – Slai

+0

不知道爲什麼這會得到一個downvote ..如果您正在投票,請提一下這樣做的原因。對我來說,這看起來像一個完整的問題。 –

回答

1

通過VBA做到這一點的一種方法是循環200次校正,將ID與MATCH函數進行比較以找到它所屬的行,而不是第二個循環(通過20000的第二個循環需要很長時間就像你說的)。

對於下面的子我已將200表複製並粘貼到20000表的列5:7中,您可以很容易地自動完成此部分,或者只是爲代碼的每個部分放入正確的工作表參考。

我也放了一個檢查線,以確保有一個匹配的小表當前的ID,否則它會拋出一個錯誤。您可以在此錯誤捕獲中的END IF前面放置一個ELSE,以突出顯示實際未找到的任何ID。這裏的代碼,希望這種方法可以幫助!

Sub replace_things() 
With ActiveSheet 
For x = 2 To 200 'Change this to however many is in the small table 
    cur = .Cells(x, 5) 'Defined cur as ID from small table 
    aMatch = Application.WorksheetFunction.CountIf(.Range("A:A"), cur) 'Check to see there's a match in large table 
    If aMatch > 0 Then ' if there's a match then... 
     theRow = Application.WorksheetFunction.Match(cur, .Range("A:A"), 0) 'get the row number the match is actually on 
     .Cells(theRow, 3) = .Cells(x, 7) 'when row is found, replace with the relevant value from col7 (col3 of small table) 
    End If 
Next x 
End With 
End Sub 
+0

謝謝@jamheadart ..正在尋找類似的東西。 –

+0

沒有probs!使用'Evaluate(COUNTIF(.range(「A:A」),cur)'和Evaluate(MATCH etc')編寫代碼可能會稍微更優雅一些,但我沒有機會嘗試它 – jamheadart

+0

我遇到問題..第一行worksheetfunction.countif工作並返回1記錄,下一行 - worksheetfunction.match不返回任何內容並拋出1004錯誤。任何想法爲什麼? –

0

超級快速的方式,複製您的CORRECT員工ID列表並粘貼在CORRUPT員工ID列表下方...突出顯示重複內容並更正突出顯示。

否則VLOOKUP可以標記哪些是腐敗?基本上從正確的列表中獲得一個唯一的字段,並將其與您的損壞列表進行比較,然後修復〜200錯誤。

+0

謝謝。多數民衆贊成我們現在正在做手動。但這很容易出錯,因爲我們必須爲200多條記錄做到這一點,所以我們還需要每天做3次,這很痛苦。這就是爲什麼計劃在宏觀上做到這一點。 –

+0

'= IF(VLOOKUP(A1,[File1.xls] Sheet1!A:A,1,FALSE),[File1.xls] Sheet1!C1,「」)' 您可以將其粘貼到您的D列第二張,您需要將[File1.xls]更改爲您的工作簿名稱。 這將搜索在File1中是否在文件2上找到ID,然後從File1返回列C(性別)(如果找到它)。然後你就可以看到它是否與你所擁有的相符,並通過這種方式使調整更容易一些。 這可以完全顛倒過來,並在Sheet1上查找Sheet2,其目的是在One頁面中排列錯誤/正確的性別,以便快速進行更改 – Bailey

+0

下一步我們可以研究如果您需要進一步自動化,我們可以只顯示200多個正確的結果,並列出200個不正確的結果,並簡單地將性別列複製/粘貼到它上面。 數據將不得不被操縱,但我相信這是可能的。 – Bailey

0

我假設員工ID是唯一的記錄,所以你可以粘貼正確的參數下,現有的,排序EMPID並強調重複很容易地找到它們。