使用Excel中VBA模块的Vlookup检查值是否在表中
我在工作表中有一个范围,我想检查用户输入到不同工作表的不同单元格中的值是否在该范围内。如果该值不在该范围内(即,用户输入的值不正确),我想标记一个测试字段以提醒用户。我这样做是作为一个更大的验证功能的一部分 如果值在该范围内,则此操作有效,但如果值不在该范围内,则函数将抛出错误(不通知我)并退出使用Excel中VBA模块的Vlookup检查值是否在表中,excel,vba,Excel,Vba,我在工作表中有一个范围,我想检查用户输入到不同工作表的不同单元格中的值是否在该范围内。如果该值不在该范围内(即,用户输入的值不正确),我想标记一个测试字段以提醒用户。我这样做是作为一个更大的验证功能的一部分 如果值在该范围内,则此操作有效,但如果值不在该范围内,则函数将抛出错误(不通知我)并退出 Public Function ValidateField(dataValue as Range) as Integer Dim result As Variant Dim sh
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
公共函数ValidateField(数据值作为范围)作为整数
作为变量的模糊结果
将工作表设置为工作表
变暗范围作为范围
Set sheet=ActiveWorkbook.Sheets(“菜单”)
设置范围=图纸范围(“BC141:BD175”)
结果=工作表函数.VLookup(CDec(数据值),范围,1,False)
这是行不通的
如果InStr(CStr(result),“Error”)>0或result=“”,则
ValidateField=1
退出功能
如果结束
如果CDec(结果)CDec(数据值),则
ValidateField=1
退出功能
如果结束
端函数
改用这个
'~~> 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)
顺便说一句,我注意到了一些事情。您正在Vlookup
中使用1
。如果只想检查值是否在ColBC
中,则不需要Vlookup
。为此,您可以使用CountIf