Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA Vlookup问题_Vba_Excel_Ssis - Fatal编程技术网

Excel VBA Vlookup问题

Excel VBA Vlookup问题,vba,excel,ssis,Vba,Excel,Ssis,我是一个精通VBA的初学者 下面是我编写的代码,它应该遍历工作表中的一列,通过引用其左侧的列值和同一工作簿中的另一个工作表来填充值,以找到正确的对应值 我使用了While循环,因此我可以将此VLOOKUP宏应用于列中的每个单元格(仅查找值changes,它应该是表示左侧列的变量): Dim结果为字符串 将工作表设置为工作表 将rownum设置为整数 作为整数的Dim迭代器 将U值设置为字符串 Dim vlookupString1作为字符串 Set sheet=ActiveWorkbook.She

我是一个精通VBA的初学者

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

我使用了
While
循环,因此我可以将此
VLOOKUP
宏应用于列中的每个单元格(仅查找值changes,它应该是表示左侧列的变量):

Dim结果为字符串
将工作表设置为工作表
将rownum设置为整数
作为整数的Dim迭代器
将U值设置为字符串
Dim vlookupString1作为字符串
Set sheet=ActiveWorkbook.Sheets(“数据表”)
rownum=图纸范围(“A1”).End(xlDown).Row
设置迭代器=3
而迭代器Selection.Value=vlookup1String
以
迭代器=迭代器+1
结束时
我在说“如果或选择或子…”时遇到错误@end

1) 我有语法错误吗?

2) 我的方法正确吗。我只在另一个地方观察过这种字符串方法来设计
VLOOKUPS
。它似乎最合适。

修复代码 您应该在循环中使用
Wend
not
End While

清洁剂替代品
但您可以在一次拍摄中填充整个范围,如下所示

  • 使用
    End(xlup)
    从底部向上“循环”一个范围比使用
    End(xlDown)
    向下看要好(不依赖空格)
  • 您几乎不需要在VBA中使用
    Select
  • 进一步解释

  • rng1
    设置从图纸数据表a列中最后使用的单元格到A3的工作范围
  • rng1.Offset(0,范围(“N1”).列-1)
    表示将rng1(即A列)偏移13列,以使用N列(即偏移A偏移14-1)进行公式插入
  • 我使用宏记录器获取了N列中该部分所需的代码
    “=VLOOKUP(RC[-1],“GICS子行业代码”!R2C1:R155C2,2,FALSE)”
  • R1C1
    speak中,
    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
    

    Selection.Value=vlookup1String可能应该是Selection.Formula=vlookup1String我也不认为你使用ActiveSheet.Cells做任何事情,你可能会把它取出来。首先,确保工作表名称不太长,在使用VBA代码时避免使用空格。另外,请尝试选择。公式使用
    WEND
    而不是
    END WHILE
    只是想一想:
    iterator
    是一个整数,因此在赋值时不使用
    Set
    ,只需使用
    iterator=3
    。此外,您的几个变量要么没有声明,要么拼写错误。在代码顶部使用
    Option Explicit
    ,即使在运行代码之前也可以更正这些错误。您能解释一下您的代码吗?我不能完全理解它。特别是偏移量的作用。我有几个这样的vlookups,我需要为我的数据表上的其他4-5列创建,所以我需要复制相同的。谢谢:)通过在“数据表”工作表的a列中查找M列中的单元格值,在“GICS…”工作表的a列中搜索该单元格,并在B列中获取该行的相应值,即可获得“数据表”工作表N列中单元格的值。。。这就是你现在的逻辑吗?@user1638796我已经添加了更多细节。希望这对汉克斯很有帮助。。代码运行良好!在过去的两天里,我一直在寻找一个关于如何在vba中有效使用宏的有用解释:)大道具!
    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