VBA If 语句将 Vlookup 应用于整个范围

Posted

技术标签:

【中文标题】VBA If 语句将 Vlookup 应用于整个范围【英文标题】:VBA If statement applying Vlookup to whole range 【发布时间】:2019-05-09 15:21:36 【问题描述】:

我正在尝试根据相邻列的值更新范围内的值,并使用 VLookUp 从另一个工作表中提取更新的值。 我遇到了一个问题,即无论相邻列是否显示正确的值,都将 VLookUp 应用于整个范围。

我尝试使用偏移量而不是范围并对语句结构进行各种调整,但我得到了不同的错误,例如:数据更新但只显示所有匹配条件的 VLookUP 数据的第一个值。

Dim S1 As Worksheet
    Set S1 = Worksheets("Sheet1")
Dim rcga As Worksheet
    Set rcga = Worksheets("RCGA")
TABLEROW = Range("A" & Rows.Count).End(xlUp).Row
Dim REFRNG As Range
Dim CHNGRNG As Range
Set REFRNG = Range("L2:L" & TABLEROW)
Set CHNGRNG = Range("J2:J" & TABLEROW)
For Each cell In REFRNG
    If cell.Value = "Trust for RCGA" Then 'currently applies vlookup to whole J range
        CHNGRNG = Application.WorksheetFunction.VLookup(S1.Range("A2:A" & TABLEROW), rcga.Range("A2:P" & TABLEROW), 16, 0)
    ElseIf cell.Value = "0" Then
    End If
Next

我想在 L 列显示“信任 RCGA”的 J 列中有任何值,以更新为 RCGA 工作表上的新计算值,其中 L 列为“0”的所有值保持不变

【问题讨论】:

是的,你需要偏移量,而且VLOOKUP中的第一个参数不能是单元格范围。 您的工作表引用也不一致 - 也需要整理一下。 我对所有使用 VLookUp 的建议是使用Index/Match。您只需输入所需的特定数据范围,例如Application.Index(OutputRange, Application.Match(SearchByTerm, SearchRange, Arg3)),注意 Arg3 是否与范围中的匹配项完全相关,而不是找到一个整体范围并尝试从所述范围的开头识别列。一个这样填写的例子是Application.Index(Columns("P"), Application.Match(Cells(1,1).Value, Columns("A"),0)) 【参考方案1】:

您将整个 A 列插入到 VLOOKUP 的第一个参数中。

试试:

CHNGRNG = Application.WorksheetFunction.VLookup(REFRNG.Offset(0, -11).Value, rcga.Range("A2:P" & TABLEROW), 16, 0)

您要“查找”的单元格是正在检查的Each cell 左侧的 11 个单元格。

此外,正如@SJR 指出的那样,您应该使用您打算 Excel 使用的工作表来限定您的范围:

TABLEROW = (s1 or rcga).Range("A" & (s1 or rcga).Rows.Count).End(xlUp).Row
Set REFRNG = (s1 or rcga).Range("L2:L" & TABLEROW)
Set CHNGRNG = (s1 or rcga).Range("J2:J" & TABLEROW)

【讨论】:

以上是关于VBA If 语句将 Vlookup 应用于整个范围的主要内容,如果未能解决你的问题,请参考以下文章

定义返回空白的自定义 VBA 函数

基于多变量的 VBA 案例选择

转载:VBA中使用vlookup函数

Access中VBA中excel文件中的VLookup

带有范围的 Excel VBA Vlookup

Outlook 表单:从 Excel 导入/VLOOKUP 数据?