我再次遇到excel文件中混合格式数据的问题。我有一个名为“用户名”列的文件。我要解决的最大问题是此列中的数据包含完全混合格式的姓氏和名字。例如:
“用户名”
约翰史密斯 卡特迈克 加菲猫,汤姆
等等......
我有第二个文件包含正确格式的数据,我有3列:“姓氏”,“名字”和“Id”。我需要做的是将与第二个文件中的人匹配的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 :(得分:3)
鉴于:
我的建议是使用excel本身而不是VBA。特别是VLOOKUP()函数。 如果你这样做有两种方法可以用这个
第一个:
第二种方法是反过来:
如果您确保创建正确的公式,则只需在后续数据集的用户名栏中粘贴新的“错误数据”