如何使用UsedRange.Find(What:=,LookAt:=)

时间:2019-04-17 17:24:16

标签: excel vb.net

我有两个Excel电子表格,其中列出了不同格式的人物姓名。
一张纸列出了格式为“第一名”的名称,按部门组织名称,但未列出其ID号。 另一张纸列出了格式为“姓氏,名字优先”的名称,按字母顺序组织它们,不显示其部门,并显示其ID号。

我要做的是提取特定部门人员的姓名和身份证号。重新排列名字和姓氏来匹配不是问题。我遇到的问题是有时名称不匹配。

例如: 工作表1将该名称列出为“ John Smith” 第2页将名称命名为“ Smith Jr,John”

在此示例中,我将在工作表2中搜索“史密斯,约翰”,但不会产生结果。

很遗憾,这些工作表是由其他人管理的,因此我无法对工作表进行编辑。

在这里,我从工作表1拆分名称,并像工作表2一样格式化它。

Dim nameTemp() As String = Split(CType(curSheet.Range("J" & xlRow).Value, String))
name = Trim(nameTemp(1)) + ", " + Trim(nameTemp(0))

在这里,我在第二张纸上寻找火柴。这会漏掉第二张表中列出的所有Jr,III,II等名称,但第一张表中没有。

idRange = curSheet.UsedRange.Find(What:=name, LookAt:=XlLookAt.xlPart)

我一直在寻找一种搜索同时包含两个子字符串的单元格的方法:

nameTemp(0) and nameTemp(1)

尽可能使用UsedRange.Find方法。

我尝试过:

idRange = curSheet.UsedRange.Find(What:=(nameTemp(0) And nameTemp(1)), LookAt:=XlLookAt.xlPart)

idRange = curSheet.UsedRange.Find(What:=nameTemp(0)What:=nameTemp(1), LookAt:=XlLookAt.xlPart)

还有我未记录的其他情况。

1 个答案:

答案 0 :(得分:0)

不是答案,但太久了,不能发表评论。

通常,当我遇到这样的问题时,我首先尝试使两张纸上的名称遵循以下格式:Last,First Middle。完成此操作后,我将使用通配符在两个工作表上进行一次vLookup:

VLOOKUP(MID(FullName, 1, LEN(FullName)*.90))&"*", Range, 1, FALSE)

如果一个列表中有中间名称/首字母,而另一列表中没有任何中间名称/首字母,则将名称修剪为90%。因此,将需要Smith,John Jr,将其修剪为Smith, Joh*,并在另一张纸上VLookup。我在两张纸上都这样做,因为有些可能在中间使用中间名,而另一些可能在中间使用中间名。

如果只有一个Sheets具有中间名,则变得更加简单,您可以将没有中间名的工作表中的通配符VLOOKUP放入可能具有中间名的工作表中。