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
感謝您的任何意見。
這是一次性事件還是應該在不同的數據集上頻繁運行? – Eddy
的一點是,我需要自動化的過程中,它會與大量的數據 – Jandrejc
的不同文件中多次運行有總是這兩個名稱之間的分隔符? (即從不'JohnSmith')除了空格和逗號之外,還有其他分隔或「污染」字符嗎?第一個字母是否總是大寫? –