我有两个不同的工作表,上面包含500+名称。我需要看看一张纸上的名字是否存在于另一张纸上。如果它确实在指定的列中说是或否。
名称应该类似于一个工作表中的ASmith,然后是另一个工作表中的ASMITH,因此不需要区分大小写。
我对VBA这一部分感到很困惑。我用java编程,用java做这类事情对我来说很容易。但在excel中,就没那么多了。非常感谢您的帮助。提亚
发布于 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"):
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行感兴趣;根据需要进行调整
发布于 2011-09-15 13:58:06
尝试如下所示:
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 SubNOTES
假设查找值在sheet1列A中,则查找列为sheet2列A。在sheet1列B中放置是/否,以显示是否找到值。Vlookup不区分大小写。您需要更改R1C1引用/列以适合您的工作簿。
它的执行速度会非常快。
https://stackoverflow.com/questions/7419018
复制相似问题