Excel宏命令 查找A表单的某一单元格内容是否包含于B表单某一单元格内容,如包含则填充相应内容

求大神帮忙写一个宏命令,要求如下:
1、首先我有两个表单,表单A中有一列基准列Aa和一列内容列Ab,表单B中有一列基准列Ba和一列效果列Bb
2、我想要做的操作是,如果Ba中的第一个单元格全部内容中包含全部Aa列第一个单元格的内容,则将对应的Bb列内容替换为Ab列对应内容,如果不包含则继续比对Aa列的第二个单元格,如此往复知道Ba列中全部内容都比对完成

假设上图为原始状态
最终期待的结果是这样的

如果大神可以给做一个宏,我可以追加给分,在此拜谢了

第1个回答  推荐于2016-05-27
Sub 整理()
Dim a1%, a2%, b1%, b2%, mb$
a1 = 2 'A表的第一行行号,不含表头
a2 = 6 'A表的最后一行行号
b1 = 9 'B表的第一行行号,不含表头
b2 = 10 'B表的最后一行行号
With ActiveSheet
For j = b1 To b2
mb = .Cells(j, 1)
For i = a1 To a2
If InStr(1, mb, .Cells(i, 1)) Then
.Cells(j, 2) = .Cells(i, 2)
GoTo skip
End If
Next
skip:
Next
End With
End Sub追问

大神,膜拜下,我能问下,两组数据如果不是同一表单的话也可以实现吗?

追答

可以的,需要改以下代码,如果是在同一个工作簿里不同的工作表里,需要两个工作表名;
如果不是在同一个工作簿的话,也行,但是在电脑上不可以有两个同名的excel文件,需要知道两个工作簿的名称及每个表单的工作表名称

追问

哦哦~~就sheet1和sheet2吧,sheet1就是数据源,sheet2就是需要比对出结果的那个,麻烦帮我写全吧^^嘿嘿

追答Sub 整理()
Dim a1%, a2%, b1%, b2%, mb$
    a1 = 2 'A表的第一行行号,不含表头
    a2 = Sheet1.Range("A65536").End(xlUp).Row 'A表的最后一行行号
    b1 = 2 'B表的第一行行号,不含表头
    b2 = Sheet2.Range("A65536").End(xlUp).Row 'B表的最后一行行号
    With Sheet1
For j = b1 To b2
        mb = Sheet2.Cells(j, 1)
        For i = a1 To a2
            If InStr(1, mb, .Cells(i, 1)) Then
            Sheet2.Cells(j, 2) = .Cells(i, 2)
            GoTo skip
            End If
        Next
skip:
    Next
    End With
    MsgBox ("整理完成")
End Sub

其中a2 = Sheet1.Range("A65536").End(xlUp).Row

等号后面那一串是自动搜索A列最后一行的行号,当然你也可以直接改成对应的行号

本回答被提问者和网友采纳
第2个回答  2014-05-21

模糊查找就可以了,还用宏?

第3个回答  2014-05-19
哪用得着宏?
B9公式
=index(B:B,max(isnumber(find(A$2:A$5,A9))*row($2:$5)))
数组公式,Ctrl+Shift+回车结束。向下填充公式。追问

不行呢~

追答

不是说了:不要直接回车,要Ctrl+Shift+回车结束!!!

相似回答