Excel VBA列值比较
我有两张excel表格。第一页包含以下数据:Excel VBA列值比较,excel,vba,comparison,Excel,Vba,Comparison,我有两张excel表格。第一页包含以下数据: Column C -------- 101-AA-103 101-AA-104 101-AA-105 101-BB-101 Column A -------- 101-AA-100 101-AA-101 101-AA-102 101-AA-103 第二张图纸包含以下数据: Column C -------- 101-AA-103 101-AA-104 101-AA-105 101-BB-101 C
Column C
--------
101-AA-103
101-AA-104
101-AA-105
101-BB-101
Column A
--------
101-AA-100
101-AA-101
101-AA-102
101-AA-103
第二张图纸包含以下数据:
Column C
--------
101-AA-103
101-AA-104
101-AA-105
101-BB-101
Column A
--------
101-AA-100
101-AA-101
101-AA-102
101-AA-103
我想比较第一页的C列和第二页的A列。例如,需要对照第二页A列中的所有行检查第一页C列中的值101-AA-103。如果找到该值,则应显示“可用”;否则,“不可用”。如何编写VBA函数来执行此操作?尝试以下操作:
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim strToFind As String
Dim res As Range
dim maxrows as Integer
Set sh1 = ThisWorkbook.Sheets("Sheet1")
Set sh2 = ThisWorkbook.Sheets("Sheet2")
maxrows = 500
For i = 1 To maxrows
strToFind = sh2.Cells(i, "A")
With sh1
Set res = .Columns("C").Find(What:=strToFind, After:=.Cells(1, "C"), LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If res Is Not Nothing Then
'Do here what you please
End If
End With
Next
请注意,您应该计算maxrows,而不是使用常量整数。使用Vlookup可以很容易地做到这一点:
=IF(ISERROR(VLOOKUP(C1,Sheet2!A:A,1,FALSE)),"Not Available","Available")
但是,既然您要求使用VBA,这里有一个函数可以做到这一点,它利用dictionary对象和变量数组来提高效率和速度
- 将列C和列A转储到变量数组中
- 制作列a值的字典
- 搜索C列条目,查看它们是否存在于
- 变量i也是行号,因此将文本放在D列中相当简单
从技术上讲,您可以创建一个新的可用性数组并将其转置到D列,但我不想让它过于复杂。@user899902:不要认为我的代码是完美的,这只是您可以/应该做的一个想法do@user899902当前位置请看我编辑的帖子:这段代码应该适合你的需要。Shey,我刚刚回答了你的问题,然后我怀疑你的问题写错了:事实上你没有拆分行,所以我认为它是一个字符串。太糟糕了:(不,是多个单词。我想拆分确切的单词,然后进行比较。A列(第1页)-->009-AB-001-XL。