【问题标题】:Excel VBA Vlookup issueExcel VBA Vlookup 问题
【发布时间】:2012-10-22 11:00:59
【问题描述】:

我是 Excel VBA 的初学者。

以下是我编写的代码,它应该遍历工作表中的列,通过引用左侧的列值填充值并引用同一工作簿中的另一个工作表来查找正确的对应值应该是什么.

我使用了While 循环,因此我可以将此VLOOKUP 宏应用于列中的每个单元格(只有查找值会发生变化,这应该是表示左侧列的变量):

Dim result As String
Dim sheet As Worksheet
Dim rownum As Integer
Dim iterator As Integer
Dim lookup_value As String
Dim vlookupString1 As String

Set sheet = ActiveWorkbook.Sheets("datasheet")
rownum = sheet.Range("A1").End(xlDown).Row
Set iterator = 3

While iterator < rownum

lookup = "M" & iterator
vlookup1String = "=VLOOKUP(" & lookup & ",'GICS Sub-industry codes'!$A$2:$B$155,2,FALSE)"
With ActiveSheet.Cells
       Range("N" & iterator).Select
       Selection.Value = vlookup1String
End With
iterator = iterator + 1

End While

我在说“预期 if 或 select 或 sub...”时收到错误 @end

1) 我是否犯了语法错误?
2)我的方法是否正确。我只在另一个地方观察到这种在 中设计VLOOKUPS 的字符串方法。它似乎最合适。

【问题讨论】:

  • Selection.Value = vlookup1String 应该是 Selection.Formula = vlookup1String
  • 另外我不认为你的 With ActiveSheet.Cells 有什么作用,你可以把它拿出来。
  • 首先,请确保工作表名称不要太长,并且在使用 VBA 代码时避免使用空格。另外,试试 Selection.Formula
  • 使用WEND 而不是END WHILE
  • 只是一些想法:iterator 是一个整数,因此在分配时不要使用Set,只需使用iterator = 3。此外,您的一些变量要么未声明,要么拼写错误。即使在运行代码之前,也可以在代码顶部使用Option Explicit 来纠正这些类型的错误。

标签: vba excel ssis vba


【解决方案1】:

修复代码
您应该在循环中使用 Wend 而不是 End While。

更清洁的替代品
但是您可以一次填充整个范围,如下所示

  1. 最好使用 End(xlup) 从底部“循环”一个范围,而不是使用 End(xlDown) 向下查看(不依赖空格)
  2. 您几乎不需要在 VBA 中使用 Select

进一步说明

  1. rng1 设置工作范围从工作表 datasheet 中 A 列中最后使用的单元格到 A3
  2. rng1.Offset(0, Range("N1").Column - 1) 表示将 rng1(即 A 列)偏移 13 列以使用 N 列(即 OFFSET A 乘 14-1)进行公式插入
  3. 我使用宏记录器在 N 列中获取了此部分所需的代码"=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"。
  4. IN R1C1 说,RC[-1] 表示引用同一行中的单元格,但左侧一列。所以在N3 中,公式将以=VLOOKUP(M4..) 开头,所以在N30 中,公式将以`=VLOOKUP(M30..) 等开头

建议代码

Sub QuickFill()
Dim ws As Worksheet
Dim rng1 As Range
Set ws = Sheets("datasheet")
Set rng1 = ws.Range(ws.[a3], ws.Cells(Rows.Count, "A").End(xlUp))
rng1.Offset(0, Range("N1").Column - 1).FormulaR1C1 = "=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"
End Sub

【讨论】:

  • 你能解释一下你的代码吗?我不能完全理解。尤其是 Offset 的作用。我有几个这样的 vlookup,我需要为我的数据表上的大约 4-5 个其他列创建,所以我需要重现相同的内容。谢谢:)
  • “datasheet”工作表的N列单元格的值是通过查找M列单元格的值,在“GICS..”表的A列中搜索得到的,并在 B 列中为该行获取相应的值...这就是您的逻辑现在正在做的事情吗?
  • @user1638796 我添加了更多细节。希望有帮助
  • 非常感谢.. 代码运行良好!过去 2 天一直在寻找有关如何在 vba 中有效使用宏的有用解释! :) 大道具!
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多