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 应用于整个范围的主要内容,如果未能解决你的问题,请参考以下文章