将vlookup值赋给变量

时间:2016-10-10 16:00:37

标签: excel-vba vba excel

我没有将vlookup公式的结果添加到单元格,而是尝试仅将结果分配给变量但不起作用。

值为“九月”,结果必须为9,但我的vba代码在Msgbox中返回0

 Sub Test()
Dim TableName2 As Integer

TableName2 = FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)"

MsgBox (TableName2)

End Sub

我试图将变量更改为字符串,而Msgbox显示“FALSE”

你能帮帮我,让我知道我做错了什么吗? :(

2 个答案:

答案 0 :(得分:2)

这是各种各样的错误 - 让我解释一下:

TableName2 = FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)"

这是一个布尔表达式,表示:

TableName2 = (FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)")

FormulaR1C1不是变量名,因此它将计算为空字符串或空数字值,与VLOOKUP公式字符串进行比较时,将返回此值的False值赋值语句,即:

TableName2 = False

False转换为整数值时(TableName2显式声明为整数,因此会发生隐式类型转换),结果为0 MsgBox声明。

相反,请尝试:

TableName2 = Application.Evaluate( _
             Application.ConvertFormula( _
             "=VLOOKUP(R1‌​9C9,Database!R1C8:R1‌​2C9,2,FALSE)", xlR1C1, xlA1))

如果搜索到的值不存在于数据库范围内,则可能仍会引发错误。

答案 1 :(得分:1)

您可以使用:

Sub Test()
Dim TableName2 As Integer

On Error Resume Next
TableName2 = Application.WorksheetFunction.VLookup(ActiveSheet.Range("I19"), Worksheets("Database").Range("H1:I12"), 2, False)
On Error GoTo 0
If TableName2 = 0 Then
    MsgBox "The month is mistyped as a match was not found"
Else
    MsgBox (TableName2)
End If

End Sub