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适当的公式,您可以简单地将新的“错误数据”粘贴到后续数据集的用户名列中