我有两张不同的床单,上面有500多个名字。我需要查看另一张纸上的名称是否存在。如果它在指定的列中表示是或否。
名称将在一张纸上类似于ASmith,然后在另一张纸中使用ASMITH,因此不需要区分大小写。
我对VBA部分感到很困惑。我在java中编程并在java中做这种事情对我来说很容易。但在excel中,并非如此。感谢您的帮助。 TIA
答案 0 :(得分:1)
首先,Visual Basic确实关心区分大小写,因此在比较两个工作表时,您需要使用VBA.UCase将所有内容转换为大写。我还包括了Trim函数,因为这个单词本身可能有空格。必须研究创建两个可比较的字符串所需的任何进一步的文本操作。我建议用expert guidance操作Excel宏的文本字符串
所以......假设两张工作表都在同一个工作簿中,最好的起点是从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行感兴趣;根据需要进行调整
答案 1 :(得分:1)
尝试这样的事情:
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
备注强>
假设查找值在sheet1列A中,查阅列是sheet2列A.在sheet1列B中显示是/否以显示是否找到值。 Vlookup不区分大小写。您需要更改R1C1引用/列以适合您的工作簿。
它会很快执行。