首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VBA检查单元格值是否存在于两个不同的工作表中

使用VBA检查单元格值是否存在于两个不同的工作表中
EN

Stack Overflow用户
提问于 2011-09-14 23:32:53
回答 2查看 6.7K关注 0票数 1

我有两个不同的工作表,上面包含500+名称。我需要看看一张纸上的名字是否存在于另一张纸上。如果它确实在指定的列中说是或否。

名称应该类似于一个工作表中的ASmith,然后是另一个工作表中的ASMITH,因此不需要区分大小写。

我对VBA这一部分感到很困惑。我用java编程,用java做这类事情对我来说很容易。但在excel中,就没那么多了。非常感谢您的帮助。提亚

EN

回答 2

Stack Overflow用户

发布于 2011-09-15 00:05:02

首先,Visual Basic不关心大小写,因此当比较这两个工作表时,您需要使用VBA.UCase将所有内容转换为大写。我还包含了Trim函数,因为单词本身可能会有空格。创建两个可比较的字符串所需的任何进一步的文本操作都必须进行研究。我建议您在使用Excel宏操作文本字符串时使用此expert guidance

So...assuming这两个工作表都在同一个工作簿中,最好的起点是从Visual Basic编辑器中获取这两个工作表的代号(默认情况下是Sheet1/Sheet2等)。在下面的代码中,我假设Sheet1是输出表,Sheet2是您要搜索的数据。如果找不到代码名,可以在下面的代码中替换Sheets("SheetName1")和Sheets("SheetName2"):

代码语言:javascript
复制
Dim SourceRow as Long
Dim DestRow as Long

For DestRow = 1 to 10
      For SourceRow = 1 to 10

            If VBA.Trim(VBA.UCase(Sheet1.Cells(DestRow,"DestCol"))) = VBA.Trim(VBA.UCase(Sheet2.Cells(SourceRow,"SourceCol"))) then
            Sheet1.Cells(DestRow,"OutputCol") = "Yes"
                  Goto NextDestRow
            End If
      Next SourceRow

Sheet1.Cells(DestRow,"OutputCol") = "No"

NextDestRow:
Next DestRow

该代码假设您在每个工作表的单个列中搜索数据,并且我在其中写入了"DestCol“和"SourceCol",您应该简单地插入该列的数值(其中A=1、B=2等)。"OutputCol“是要在目标工作表上放置输出的列

循环假设您对每个工作表上的第1到10行感兴趣;根据需要进行调整

票数 1
EN

Stack Overflow用户

发布于 2011-09-15 13:58:06

尝试如下所示:

代码语言:javascript
复制
Sub HTH()

    With Sheet1.Range("B1", Sheet1.Cells(Rows.Count, "B").End(xlUp))
        .FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],Sheet2!C[-1],1,FALSE)),""NO"",""YES"")"
        .Value = .Value
    End With

End Sub

NOTES

假设查找值在sheet1列A中,则查找列为sheet2列A。在sheet1列B中放置是/否,以显示是否找到值。Vlookup不区分大小写。您需要更改R1C1引用/列以适合您的工作簿。

它的执行速度会非常快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7419018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档