【问题标题】:Combining EVALUATE with VLOOKUP in VBA在 VBA 中结合 EVALUATE 和 VLOOKUP
【发布时间】:2016-11-23 01:46:59
【问题描述】:

我正在尝试在 VBA 中执行一系列 VLOOKUP,并认为必须有一种方法可以使用 EVALUATE 函数批量执行此操作,而不是单独循环遍历工作表上的值(我已经知道如何做)。但我正在努力使查找值“动态”。 这是我到目前为止所得到的:

Dim ws1 as worksheets, ws2 as worksheet, rngJ2 as Range, Lastrow2 as long

Set ws1 = ActiveWorkbook.Sheets("Sheet1")
Set ws2 = ActiveWorkbook.Sheets("Sheet2")

 LastRow2 = ws2.Cells.Find(What:="*", _
                After:=Range("A1"), _
                LookAt:=xlPart, _
                LookIn:=xlFormulas, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious, _
                MatchCase:=False).Row

set rngJ2 = ws2.range("J2:J" & Lastrow2)

现在这是我接下来要做的,知道 rngJ2.address(row) 部分的语法不正确:

rngJ2.Value= Evaluate("VLOOKUP(Sheet2!I" & rngJ2.address(row) & ",Sheet1!A:H,8,FALSE)")

我要对 rngJ2.address(row) 部分执行的操作是为范围内的每个单元格定义适当的行,以便单元格 J5 使用 I5 作为查找值,J12 使用 I12 等。

有什么想法吗?

【问题讨论】:

  • Range rngJ2 会有多行,Vlookup 的第一个条件是单个单元格。
  • 您是否将 VLookUp 结果放入一列?如果是这样,您可以在第一个公式中输入公式并使用 Range.FillDown 在多行中快速使用公式。

标签: vba excel vlookup evaluate


【解决方案1】:

那里根本不需要Evaluate。您可以改用Worksheetfunction 版本:

rngJ2.Value = WorksheetFunction.VLookup(rngJ2.Offset(, -1), Sheets("Sheet1").Range("A:H"), 8, False)

【讨论】:

  • 我没有想到那个偏移技巧,但这正是我想要的。我不知道 VLOOKUP 可以分配到这样的整个范围,所以谢谢!!!
  • 可以在查找值部分使用多个单元格让 VLOOKUP 与Evaluate 打球,但它需要一些额外的构造,所以这很多更简单!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多