通过VBA

时间:2015-06-01 21:39:29

标签: excel vba excel-vba

为了尝试我的一个基本程序,并进一步开发它,我需要帮助引用Excel公式中的最后一行引用,以及将公式一致地向下拖动到文档的最后一行。

详细说明我试图在我的vlookup公式中引用一个不断扩展的映射表中的最后一行。我需要这个的原因是因为当我不再编写这个程序时,这个映射表会扩展,我需要我的vlookup公式,每次运行程序时都会生成该公式,以适应不断变化的大小。

此外,我更紧迫的问题是关于采用vlookup公式并能够将其拖动到工作表的最后一行。工作表将是静态的,最后一行的范围是70,000行到90,000行。我试图在这种情况下避免循环,因为这已经是一个非常苛刻的公式,我不想循环遍历每一行。

目前我的基本代码看起来像这样(这是作为概念证明而构建的,我知道当前的方法并不是最巧妙的,但它起到了最初的作用)。

        Ath.Cells(1, x) = "Business"
    Ath.Cells(2, x).Select
    ActiveCell.FormulaR1C1 =  "=IFERROR(VLOOKUP(RC[1],Mapping!R2C4:R264C5,2,0),VLOOKUP(LEFT(RC[1],2),Mapping!R1C3:R264C5,3,0))"
    Ath.Range("d2").Copy
    Range("d2:d90000").Select
    ActiveSheet.Paste
    Calculate

我想改变这个

Ath.Range("d2").Copy
    Range("d2:d90000").Select
    ActiveSheet.Paste

ActiveCell.FormulaR1C1 =  "=IFERROR(VLOOKUP(RC[1],Mapping!R2C4:R264C5,2,0),VLOOKUP(LEFT(RC[1],2),Mapping!R1C3:R264C5,3,0))"

2 个答案:

答案 0 :(得分:0)

也许这些?

Ath.Range("d2").Copy
Range("d2:d" & Range("D" & Rows.Count).End(xlUp).Row).Paste

ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[1],Mapping!R2C4:R" & Sheets("Mapping").Range(ActiveCell.Offset(Rows.Count, -1)).End(xlUp).Row & "C5,2,0),VLOOKUP(LEFT(RC[1],2),Mapping!R1C3:R" & Sheets("Mapping").Range(ActiveCell.Offset(Rows.Count, -1)).End(xlUp).Row & "C5,3,0))"

答案 1 :(得分:0)

将Dans回答与我自己的工作相结合,我已经开发出一种解决方案。

Sub Formulas()

Dim Map As Worksheet
Dim Ath As Worksheet
Dim last As Long
Set Ath = Sheets("Athena IBT TEST")
Set Map = Sheets("Mapping")


last = Map.Cells(Rows.Count, "D").End(xlUp).Row


ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[1],Mapping!R1C1:R" & last & "C4,4,0),IFERROR(VLOOKUP(LEFT(RC[1],3),Mapping!R1C2:R" & last & "C4,3,0),VLOOKUP(LEFT(RC[1],3),Mapping!R1C3:R" & last & "C4,2,0)))"


End Sub