将 vlookup 值分配给变量

Posted

技术标签:

【中文标题】将 vlookup 值分配给变量【英文标题】:assigning a vlookup value to a variable 【发布时间】:2016-10-10 16:00:36 【问题描述】:

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

值为“September”,结果必须为 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”

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

【问题讨论】:

任何答案对您有用吗?该网站因反馈而蓬勃发展。如果任何工作,请通过单击答案的复选标记标记为正确。如果它们不起作用,请告诉我们出了什么问题,以便我们改进答案。 【参考方案1】:

这都是错误的——让我解释一下:

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))

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

【讨论】:

【参考方案2】:

你可以用这个:

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

【讨论】:

以上是关于将 vlookup 值分配给变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中进行 vlookup 和填写(如在 Excel 中)?

excel vlookup函数怎么查询一个值返回多个结果

VLOOKUP函数常用套路大全

Excel公式-如果没有查找值,则VLOOKUP保留为空白

Google 表格循环 VLOOKUP 并连接结果

将 VLookup 公式设置为 excel 单元格