VBA excel,比较两个工作簿中的string

在excel文件中我再次遇到混合格式数据的问题。 我已经得到名为“用户名”列的文件。 我要解决的最大问题是,这一栏里的数据是由混合格式的姓氏和名字组成的。 例如:

“用户名”
约翰·史密斯
卡特迈克
加菲猫汤姆

等等…

我有第二个文件包含正确格式的数据,我有3列:“姓”,“名”和“ID”。 我需要做的是将与第二个文件中的人匹配的Id复制到第一个文件。

我的想法是循环“用户名”列,并使用InStr函数与首先“姓氏”列进行比较,如果匹配与“名字”列比较。 然后,如果有匹配,我会将Id复制到第一个文件中的列“B”。 但事实certificate,我在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 

感谢您的任何build议。

鉴于:

  • 它需要运行有限的时间
  • 源数据格式错误,需要对结果进行一些校对
  • 可能会有一些情况需要手动“纠正”

我的build议是使用Excel本身而不是VBA。 特别是VLOOKUP()函数。 如果你这样做,有两种方法可以解决这个问题

首先:

  • 在良好的数据和一些新的列连接姓氏/名字在不同的格式,你期望“名姓”,“姓,名”等
  • 然后在带有VLOOKUP()的列的baddata表单中查找查找值是id的不同格式
  • 现在,您可以获得多个带有匹配格式ID的空白列,以及可以在需要时进行评估和修正的空白查找空白

其次是反过来做:

  • 在你的baddata excelsheet中添加一个名字和一个姓氏列,这个名字列是从名字列中填充的(需要很多左/ instr的东西)
  • 创build一个组合(一致格式)名称列,你可以在gooddata中做一个查找

如果您确保创build适当的公式,您可以简单地将新的“错误数据”粘贴到后续数据集的用户名列中