2011-08-19 69 views
2

我再次遇到了excel文件中混合格式數據的問題。我有名爲「用戶名」的列的文件。我要解決的最大問題是,本專欄中的數據由完全混合格式的姓氏和名字組成。例如:VBA excel,比較兩個工作簿中的字符串

「用戶名」
約翰·史密斯
卡特邁克
加菲貓,湯姆

等等......

我已經得到了第二個文件其中包含在數據格式正確,我得有3列:「姓」,「名」和「ID」。我需要做的就是複製第二個文件的第一個文件相匹配的人的標識。

我的想法是遍歷「用戶名」欄,並使用InStr函數與第一個「姓」列,如果匹配與「名」列來比較比較吧。然後,如果有匹配,我會將Id複製到第一個文件中的列「B」。但事實證明,我在VBA中太弱了。

這是我寫的。它不會在所有的工作,但也許會幫助你理解我的問題是什麼:

Option Explicit 

Sub FindID() 

Dim rLastCell, rFirstCell, rUserCell As Range 
Dim LastCell, FirstCell, UserCell As Range 
Dim file As Workbook 
Dim i As Long 

'open file to compare 
Set file = Workbooks.Open(Filename:=ThisWorkbook.Path & "\gooddata.xls") 

'set last used cell 
Set rLastCell = file.Worksheets("Sheet1").Range("A65536").End(xlUp) 
Set rFirstCell = file.Worksheets("Sheet1").Range("B65536").End(xlUp) 
Set rUserCell = ThisWorkbook.Worksheets("Sheet1").Range("C65536").End(xlUp) 

With ThisWorkbook.Sheets("Sheet1") 

For Each UserCell In .Range("C2:C" & rUserCell.Row) 
    For Each LastCell In file.Sheets("Sheet1").Range("A2:A" & rLastCell.Row) 
     If InStr(0, UserCell.Value, LastCell.Value, vbTextCompare) <> 0 Then 
      For Each FirstCell In file.Sheets("Sheet1").Range("B2:B" & rFirstCell.Row) 
       If InStr(0, UserCell.Value, FirstCell.Value, vbTextCompare) <> 0 Then 
        'copy id from gooddata.xls to baddata.xls 
       End If 
      Next FirstCell 
     End If 
    Next LastCell 
Next UserCell 

End With 

file.Close savechanges:=True 
Set file = Nothing 

End Sub 

感謝您的任何意見。

+0

這是一次性事件還是應該在不同的數據集上頻繁運行? – Eddy

+0

的一點是,我需要自動化的過程中,它會與大量的數據 – Jandrejc

+0

的不同文件中多次運行有總是這兩個名稱之間的分隔符? (即從不'JohnSmith')除了空格和逗號之外,還有其他分隔或「污染」字符嗎?第一個字母是否總是大寫? –

回答

3

鑑於:

  • 它運行所需要的時間
  • 源數據格式錯誤數量有限,其要求的結果的一些校對
  • 將有可能某些情況下需要手動「更正」

我的建議是使用excel本身而不是VBA。具體地,VLOOKUP()函數。 如果你有2種方式去與這個

第一:

  • 在gooddata和串聯的,你希望「姓」的不同格式的姓氏/名字了一些新的欄目, 「姓氏,名字」等
  • 然後在列baddata片上,VLOOKUP()做了不同的格式,其中查找值是id
  • 現在你與ID的多個列匹配的格式,查找和空白查找錯誤,您可以根據需要進行評估和更正

二是要做到這一點的其他方式:

  • 添加一個名字和你的baddata excelsheet一個姓列,你從名字列填充(需要大量的左/ INSTR東西)
  • 創建一個組合(格式一致)名稱欄,你可以在gooddata

如果您確保在用戶名F列創建適當的公式的你可以簡單地在新的「壞數據」粘貼做一個VLOOKUP爲或後續數據集