Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA列值比较_Excel_Vba_Comparison - Fatal编程技术网

Excel VBA列值比较

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

我有两张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  
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。