使用Excel中的VBA模块中的Vlookup检查值是否在表中

时间:2013-12-15 11:28:11

标签: excel-vba vba excel

我在工作表中有一个范围,我想检查用户输入不同工作表的不同单元格的值是否在该范围内。如果该值不在该范围内(即,用户输入的值不正确),我想标记一个测试字段以警告用户。我这样做是为了更大的验证功能的一部分。

如果值在范围内,则此方法有效,但如果不在,则该函数会抛出错误(不提示我)并退出

 Public Function ValidateField(dataValue as Range) as Integer
     Dim result As Variant

     Dim sheet As Worksheet
     Dim range As range

     Set sheet = ActiveWorkbook.Sheets("Menu")
     Set range = sheet.range("BC141:BD175")


     result = WorksheetFunction.VLookup(CDec(dataValue), range, 1, False)

     'this does not work
     If InStr(CStr(result), "Error") > 0 Or result = "" Then
        ValidateField = 1
        Exit Function
     End If
     If CDec(result) <> CDec(dataValue) Then
        ValidateField = 1
        Exit Function
     End If
End Function

1 个答案:

答案 0 :(得分:0)

改为使用

'~~> Check if `CDec(dataValue)` exists in Column BC
If Application.WorksheetFunction.CountIf(Rng.Columns(1), CDec(dataValue)) = 0 Then
    '
    '~~> Not Found... Do Something
    '
    Exit Function
End If

这将在

之前
result = WorksheetFunction.VLookup(CDec(dataValue), range, 1, False)
顺便说一下,我注意到了一些事情。您在1中使用Vlookup。如果您只是想检查值是否在Col BC中,那么您不需要Vlookup。您可以将CountIf用于此目的。