Excel VBA比较A列到B列

时间:2015-06-30 20:40:55

标签: excel vba

我正在尝试运行此代码:

Private Sub CommandButton1_Click()
    Dim Row_A As Integer, Row_B As Integer, Is_Copy As Boolean
    Is_Copy = False

    For Row_A = 1 To 850
        For Row_B = 1 To 10840
            Is_Copy = IsNumber(Search(Cells(Row_A, 1), Cells(Row_B, 2), 1))
            If Is_Copy Then Cells(Row_B, 2).Interior.Color = RGB(255, 0, 0)
            If Is_Copy Then Cells(Row_B, 3).Value = Is_Copy
            If Is_Copy Then Cells(Row_B, 4).Value = Row_A
            If Is_Copy Then Cells(Row_B, 5).Value = Row_B


            Is_Copy = False
        Next Row_B
    Next Row_A
End Sub

但我得到一个弹出窗口说:

  

“编译错误:Sub或Function not defined”

然后突出显示第1行和第7行搜索。

我需要做些什么来解决这个问题?

我想解决的问题: 我有两个UID列表,我只是比较它们中的两个,但是列b在末尾有3个额外的字符,所以我使用搜索来检查列b是否包含列A.

4 个答案:

答案 0 :(得分:1)

Search不是VBA中的函数。除非你有一个具有该名称的UDF,否则代码将抛出错误。

答案 1 :(得分:0)

我一直在使用这种功能,在以前的SO线程中找到。这不是VBS的答案,但可能是实现目标的更简单方法。

=IF(ISNA(VLOOKUP(<single column I value>,<entire column E range>,1,FALSE)),FALSE, TRUE)

-OR -

=IF(ISNA(VLOOKUP(<single column I value>,<entire column E range>,1,FALSE)),"FALSE", "File found in row "   & MATCH(<single column I value>,<entire column E range>,0))

您可以替换并使用命名范围。这可能是最简单的。

只需将该公式拖动到您想要的任何列中的I列的长度。

答案 2 :(得分:0)

替换

Is_Copy = IsNumber(Search(Cells(Row_A, 1), Cells(Row_B, 2), 1))

类似

Is_Copy = InStr(Cells(Row_A, 1), Cells(Row_b, 2)) > 0

IsNumberSearch不是VBA方法,它们是工作表函数。

答案 3 :(得分:0)

如上所述,搜索不是vb方法或函数。在excel中比较的最佳方法是使用VLOOKUP excel函数,它也不需要编写任何vba脚本。