请教高手,EXCEL如何实现两表的模糊查询核对,并且自动填写有关信息!急!拜托了!

在EXCEL表中,通过查找第二张表集团单位名称,在第一张表内自动填充相应的人员姓名比如,强调2张表里面,同一个集团单位,名称有差异,例如:第一张表集团单位名称“ 区安监局”, 在第二张表中集团单位名称则为“广西壮族自治区安全生产监督管理局” ,对应的人员名称为张**,则该人员姓名就自动填充在第一个表的人员名称栏。请高手帮忙啊!在线等!!拜托高手了!
先谢谢 朱荟非 给我的回复,但是这样解决不了问题哦,我的2张表格数据量太大了,几万条,都会存在简称的现象,不知道能够通过判断里面几个字来确定为同一个单位的实现方法吗?
呵呵,不好意思,真的看不懂哦,套用模板了,得不到结果,还是明天再HI你吧。
谢谢xinzhe2002的答案,虽然不是100%得到结果,但是已经找到了60%,谢谢了!

现有一方法,测试过了。基本上能通过的,算是能解决你的问题吧。
基本思路是:把前面简化的简称,分解出来,分别在其中加上"*",
然后对其进行模糊查找。
如果下面这个公式,不能完全解决你的问题。
你可以根据你的那些简称与实际的全称的一些规律,
通过这公式,受到启发,把"*"加在更加合适的位置,
编写完全符合你的具体情况的公式。

表二的A列为单位,B列为姓名,第一行是标题
表一的A列为单位,要在B列填入姓名,
B2中输入公式
=VLOOKUP(IF(LEN($A2)=1,"*"&$A2&"*",IF(LEN($A2)=2,"*"&LEFT($A2,1)&"*"&MID($A2,2,1)&"*",IF(LEN($A2)=3,"*"&LEFT($A2,1)&"*"&MID($A2,2,1)&"*"&MID($A2,3,1)&"*",IF(LEN($A2)=4,"*"&LEFT($A2,1)&"*"&MID($A2,2,1)&"*"&MID($A2,3,1)&"*"&MID($A2,4,1)&"*",IF(LEN($A2)=5,"*"&LEFT($A2,1)&"*"&MID($A2,2,1)&"*"&MID($A2,3,1)&"*"&MID($A2,4,1)&"*"&MID($A2,5,1)&"*",IF(LEN($A2)=6,"*"&LEFT($A2,1)&"*"&MID($A2,2,1)&"*"&MID($A2,3,1)&"*"&MID($A2,4,1)&"*"&MID($A2,5,1)&"*"&MID($A2,6,1)&"*",$A2)))))),Sheet2!$A:$B,2,0)

在B列中一直往下复制,

在B列中就显示了相应的单位对应的姓名了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-11
比如表二的A列为单位,B列为姓名,第一行是标题
表一的A列为单位,要在B列填入姓名,B2公式
=VLOOKUP("*"&A2&"*",Sheet2!A:B,2,0)
这样如果表一是“区安全生产监督管理局”,表二是“广西壮族自治区安全生产监督管理局”,就没问题。但像你说的这种情况处理不了。比如说另外还有“区安全局”、“市安监局”等等缩写,那模糊查询如何判断呢?
有一个办法,就是在表二的A列侯插入一个辅助列,写上大家习惯的简称。再把上面公式的Sheet2!A:B改为Sheet2!B:C

刚才已经说了,你所理解的提取几个关键字,但是这个无法判断。如果是确定的关键字,可以使用通配符。但如果像“市安全局”、“区安全局”、“市安监局”这样的,都含有某些关键字,而且关键字都是不确定的。这个用EXCEL很难处理。本回答被网友采纳
第2个回答  2010-12-11
办法是有的。但是几万条数据用公式会把电脑卡死的,只能用VBA。但是有一个问题,如果输入的简称通过模糊匹配找到多个又怎么办?下面只能简单说一下(假似要引用的数据在表二,A列是单位名称,B列是单位人员姓名,要在输入表A列输入简称,B列返回对应单位人员姓名)
1、用自定义函数:
Function xIPart(ByVal StrHS As String)
Dim k As Byte, n As Byte, i As Long, Arr
Arr = Sheets("表二").Range("a2:b" & Sheet2.[a65536].End(3).Row)
If StrHS <> "" Then
For i = 1 To UBound(Arr)
For k = 1 To Len(StrHS)
If Arr(i, 1) Like "*" & Mid(StrHS, k, 1) & "*" Then
n = n + 1
End If
Next
If n = Len(StrHS) Then k = i: Exit For
Next
xIPart = Arr(k, 2)
Else
xIPart = ""
End If
End Function
按AIT+F11进入VBE编辑器,单击“插入”-“模块”。然后将以上自定义函数复制粘贴到模块中,关闭编辑器返回工作表,在输入表B2单元格输入:=xIPart(A1) 下拉
2、代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
Dim k As Byte, n As Byte, i As Long, Arr
Arr = Sheets("表二")..Range("a2:b" & Sheet2.[a65536].End(3).Row)
For i = 1 To UBound(Arr)
For k = 1 To Len(Target.Value)
If Arr(i, 1) Like "*" & Mid(Target.Value, k, 1) & "*" Then
n = n + 1
End If
Next
If n = Len(Target.Value) Then k = i: Exit For
Next
Target(1, 2) = Arr(k, 2)
End Sub
右键单击输入工作表标签,在右键菜单中选择“查看代码”,在出现的工作表代码编辑区复制粘贴以上代码返回工作表即可测试。
以上二种方法你可以任选一种。如果有问题HI我在线交谈,明天上午我在线。
第3个回答  2010-12-11
你这样的模糊查询,很有困难的
即便实现了,可能也会影响准确性
建议你使用有效性,重新梳理数据
第4个回答  2010-12-13
学习
相似回答