【问题标题】:VBA Excel vlookup in loop problemVBA Excel vlookup循环问题
【发布时间】:2011-10-29 09:05:36
【问题描述】:

我在包含订单的 Excel 电子表格中的 VBA 代码存在问题。每行包含一个客户编号,我用它来查找客户电子邮件地址,该编号包含在工作簿的不同工作表中。

vlookup 代码适用于单个单元格,但问题是当我尝试遍历电子表格的所有行时。单个单元格的 Excel 公式是,例如,

=VLOOKUP(B2,Customers!A2:D1000,4,FALSE)

为此生成的 VBA 代码是:

    Range("M2").Select
ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)"

将此合并到一个循环中,选择起始单元格后,我有以下内容:

Cells(2, 13).Select
Do
  ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)"
  ActiveCell.Offset(1, 0).Select
Loop Until IsEmpty(ActiveCell.Offset(0, -10))    

问题是我希望“表格数组”固定,而不是相对于正在查找其值的单元格。但我绝对不知道该怎么做。如果我按如下方式更改代码,我会收到运行时错误:

ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-11],Customers!A2:D1000,4,FALSE)"

我尝试过引用、取消引用、设置范围变量、将范围变量与 .address 一起使用...有人可以帮忙吗?

非常感谢。

【问题讨论】:

    标签: loops excel vlookup vba


    【解决方案1】:

    我很确定您的 R1C1 公式中的括号表明您正在指定一个相对范围(尤其是其中的负数)。如果要指定绝对范围,需要指定R1C1单元格不带括号;例如R2C2:R4C4。

    举个简单的例子:

    Sub test()
      Sheet1.Range("C5").FormulaR1C1 = "=VLOOKUP(1,R1C1:R3C3,2,FALSE)"
    End Sub
    

    运行它会在单元格 C5 中为您提供一个绝对“A1”样式的公式。

    我认为你的问题可能是:

    Customers!RC[-12]:R[999]C[-9]
    

    因为它是一个相对范围。您必须明确指定数据表的位置;例如Customers!RC12:R999C9(你需要弄清楚它在你的工作表上的位置)。

    解决这个问题的一种简单方法是在工作表上突出显示数据表,然后切换到 Visual Basic 编辑器并手动运行它(将光标放在 Sub 内,然后按“播放”按钮或转到运行->运行)。

    Sub test2()
        Dim r As Range
        Set r = Application.Selection
        InputBox "your r1c1 range:", , r.Address(True, True, xlR1C1)
    End Sub
    

    【讨论】:

    • 你是对的,引用确实是相对的,我一直在努力弄清楚如何指定一个绝对范围。感谢您的 cmets,我会试用它们并告诉您情况如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2015-03-24
    相关资源
    最近更新 更多