【问题标题】:VBA : How do I insert VLookup formula (instead of the values) in a cell?VBA:如何在单元格中插入 VLookup 公式(而不是值)?
【发布时间】:2019-05-10 13:51:47
【问题描述】:

我在 excel 工作簿中设置键的“数据库”(混合业务线、业务单位和其他一些信息)。 我需要使用这些键进行 VLookup 并在另一个 Excel 工作簿中搜索这些键。我想通过 VBA 做到这一点。

Sub CreateVLookUp()
    Dim rw As Long, x As Range
    Dim extwbk As Workbook, twb As Workbook
    Dim KeyRange As Range
    Dim KeyCell As Range
    Dim lastrow As Long

    lastrow = Worksheets("Parameters").Range("I" & Rows.Count).End(xlUp).Row
    Set KeyRange = Worksheets("Parameters").Range("I8:I" & lastrow)

    Set twb = ThisWorkbook
    Set extwbk = Workbooks.Open("C:\Users\vih8452\Documents\ExcelFile.xlsx")
    Set x = extwbk.Worksheets("Database Structure").Range("$A:$T")



    With twb.Sheets("Parameters")

        For rw = 15 To .Cells(Rows.Count, 10).End(xlUp).Row
            .Cells(rw, 14) = Application.VLookup(.Cells(rw, 9).Value2, x, 15, False)
            .Cells(rw, 15) = Application.VLookup(.Cells(rw, 9).Value2, x, 11, False)
            .Cells(rw, 16) = Application.VLookup(.Cells(rw, 9).Value2, x, 12, False)
        Next rw

    End With

    extwbk.Close savechanges:=False
End Sub

我几乎已经完成了我的任务,但主要问题是当我运行 VBA 宏时,它只是粘贴结果。 我想要的是查看单元格中的结果,以及公式栏中的公式(这样我就可以检查我的结果是真还是假)。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    设置公式时不需要循环:

    Sub CreateVLookUp()
        Dim x As Range
        Dim extwbk As Workbook
        Dim lastrow As Long
    
        Set extwbk = Workbooks.Open("C:\Users\vih8452\Documents\ExcelFile.xlsx")
        Set x = extwbk.Worksheets("Database Structure").Range("$A:$T")
    
        With ThisWorkbook.Sheets("Parameters")
    
            lastrow = .Range("I" & Rows.Count).End(xlUp).Row
            .Range(.Cells(15, 14), .Cells(lastrow, 14)).Formula = "=VLOOKUP(I15," & x.Address(1, 1, xlA1, 1) & ",15,FALSE)"
            .Range(.Cells(15, 15), .Cells(lastrow, 15)).Formula = "=VLOOKUP(I15," & x.Address(1, 1, xlA1, 1) & ",11,FALSE)"
            .Range(.Cells(15, 16), .Cells(lastrow, 16)).Formula = "=VLOOKUP(I15," & x.Address(1, 1, xlA1, 1) & ",12,FALSE)"
    
        End With
        extwbk.Close savechanges:=False
    End Sub
    

    【讨论】:

    • 完美,终于可以使用了。非常感谢您的帮助
    • 最后一个问题来完全理解这个 vba 代码是如何工作的。 VLookup 怎么知道第 16 行的例子,它将查找值切换到 I16 等等?
    • @Orfuz 因为在内部,公式在 R1C1 中,就像 other answer 显示的那样,并且在 R1C1 中,列中的所有单元格都有 identical formulasvlookup 没有做任何事情来实现它。
    • @Orfuz 它就像一个拖动填充,当它沿着列向下移动时,它会相应地更改任何相关引用。
    【解决方案2】:

    你必须这样写:

     .Cells(rw, 14).FormulaR1C1 = "=VLOOKUP(" & .Cells(rw, 9).Value & ", C1:C20, 15, FALSE)"
    

     .Cells(rw, 14).FormulaR1C1 = "=VLOOKUP(RC[-5], C1:C20, 15, FALSE)"
    

    要参考另一张纸,只需放置:

     .Cells(rw, 14).FormulaR1C1 = "=VLOOKUP('Sheet Name'!RC[-5], 'Sheet Name'!C1:C20, 15, FALSE)"
    

    【讨论】:

    • 一个问题,查找范围在不同的工作簿和工作表中。这将在错误的工作表上查找范围。
    • 我收到运行时错误“1004”:尝试运行您的代码时 Pspl 是的,Scott 是对的,这不会在正确的范围内查找,因为该范围在另一个工作簿中。
    • 最后表明rw和循环是不需要的。
    • 仍然,使用代码: .Cells(rw, 14).FormulaR1C1 = "=VLOOKUP('Sheet Name'!RC[-5], 'Sheet Name'!C1:C20, 15, FALSE)" 问题是我无法参考其他工作簿中的工作表
    • @Orfutz,我不明白你为什么会出错。无论如何,它与公式无关。如果它有错误不是运行时。这是一个公式错误并显示在单元格上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多