【问题标题】:VBA VLookup in Loop循环中的 VBA VLookup
【发布时间】:2018-01-23 12:35:15
【问题描述】:

我正在尝试对 G 列中名为“SyS”的工作表上的列数据集进行 VLOOKUP。我想使用位于同一工作簿中的另一个名为“CONF_mapping”的工作表中的列来查找相关数据。我需要找到位于 ("A1:E65000") 范围内的数据(它位于 A 列,但我需要使用对 SysS 的 vlookup 从其他列检索数据)。我的代码没有得到好的结果,请原谅,这是我在论坛上的第一个问题。

Worksheets("SyS").Select
Dim wsThis As Worksheet
Dim aCell As Range

Sheets("CONF_mapping").Columns(2).Copy Destination:=Sheets("SyS").Columns(8)
Set wsThis = Sheets("SyS")
    With wsThis
        For Each aCell In .Range("A1:E65000")
            '.Cells(aCell.Row, 8) = "Not Found"
            On Error Resume Next
            .Cells(aCell.Row, 8) = Application.WorksheetFunction.VLookup( _
                            aCell.value, wsThat.Range("G2:G65000"), 2, False)
            On Error GoTo 0
         Next aCell
     End With
Worksheets("SyS").Select

我找到了这段代码,但我无法让它对我有用。 我将不胜感激。

【问题讨论】:

  • 你没有显示wsThat的定义。
  • 为什么不起作用?似乎是什么问题?
  • 它只是在系统的第 8 列中复制 CONF_mapping 的第 2 列,而不是进行 vlookup .. 我无法做到这一点...

标签: vba loops vlookup


【解决方案1】:

你错了:

VLookup(aCell.value, wsThat.Range("G2:G65000"), 2, False)

范围“G2:G65000”只有 1 列 G,但您尝试获取不存在的列#2。

更新: 我猜你需要这样的东西:

Const COLUMN_TO_MATCH_IN_SYS = 8 Const COLUMN_TO_MATCH_IN_CONF = 1 Sub test() Dim wsSys As Worksheet Dim wsConf As Worksheet Set wsSys = Sheets("SyS") Set wsConf = Sheets("CONF_mapping") Dim RowSys As Range Dim RowConf As Range For Each RowSys In wsSys.UsedRange.Rows For Each RowConf In wsConf.UsedRange.Rows If RowSys.Cells(1, COLUMN_TO_MATCH_IN_SYS) = _ RowConf.Cells(1, COLUMN_TO_MATCH_IN_CONF) Then ' Copy row values which is needed RowSys.Cells(1, 6) = RowConf.Cells(1, 1) ' From column A(conf) to G(sys) RowSys.Cells(1, 7) = RowConf.Cells(1, 2) ' From column B(conf) to H (sys) End If Next aCell Next End Sub

使用此解决方案,您无需搜索每个单元格的范围(仅针对每一行),因此它的工作速度会快 5 倍。

【讨论】:

  • 嗯是真的...谢谢..但它仍然在做我想做的事
猜你喜欢
  • 2015-03-24
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多