繁体   English   中英

在VBA中使用数组而不是范围

[英]Using array instead of ranges in VBA

我现在只使用VBA几周了,所以请耐心等待。

我正在尝试更改宏,以便从数组而不是范围读取。 我需要更改的部分之一使用.formulaR1C1来运行vlookup,但是我很难弄清楚如何使用数组完成此操作。

这方面的一个例子是以下行:

.Range("M2:L" & lastrow).FormulaR1C1 = "=VLOOKUP(RC[-1], Sheet2!R1C1:R4C10, 3, 0)"

我不太确定我是否可以将数组的值设置为公式,如上所述,或者如果我必须将值存储为String,然后在打印时编辑单元格的值该列返回工作表。

我到目前为止的内容如下:

For i = 2 To lastrow
arr(i, 13).FormulaR1C1 = "=VLOOKUP(RC[-1],Sheet2!R1C1:R4C10,3,0)"
Next

提前致谢!

将值存储为字符串肯定是一个有效的选项。 只需在数组中编写公式,假设它是Variant / String类型,当您将数据放回工作表时,可以在Cell(Range)对象上使用.FormulaR1C1将其作为公式应用。

arr(i, 13) = "=VLOOKUP(RC[-1],WMSPAM!R1C1:R4C10,3,0)"
...
Range("M2").FormulaR1C1 = Arr(1,13)

我相信这种方法可能是最有效,最容易维护的。 当你正在学习并且似乎对可能的东西感到好奇时,这里有一些关于你如何处理这个问题的例子,并有一些进一步的解释。


.FormulaR1C1是一个Range对象方法,因此如果该项是Range对象,则可以在Array项上调用它的唯一方法。

Dim arr(0 To 10) As Range
Set arr(0) = Range("A1")
arr(0).FormulaR1C1 = "=2+2"

请注意,由于Ranges是一个Object(引用类型),此操作将直接影响数组中指定的Range。 在上面的例子中,公式“= 2 + 2”将被放入单元格A1 您可以在此处了解有关参考和值类型之间差异的更多信息。


如果您的数组只包含值,那么实现所需的另一种方法是使用WorksheetFunction对象。 使用此对象,您可以在VBA中访问要在工作表中使用的公式函数。

WorksheetFunction.VLookup(Arg1, Arg2, Arg3, Arg4)

与编写代码中的任何内容一样, WorksheetFunction方法需要一些试验和错误才能使它们按预期工作,但根据我的经验,这些具体实现起来可能很棘手,但有些情况下它们非常有用!

您可以在此处阅读有关VLookup方法的更多信息。

您可以尝试使用.Offset()

Sub Test()

    lastrow = 11
    With Sheets(1)
        Set Rng = .Range("M2:L" & lastrow)
    End With

    For i = 0 To Rng.Rows.Count - 1
        Rng.Offset(i, 12).FormulaR1C1 = "=VLOOKUP(RC[-1],Sheet2!R1C1:R4C10,3,0)"
    Next

End Sub

我不确定你在问什么。 您的第一个代码行以最有效的方式将公式写入两列范围,您的第二个代码段显示当时对一个单元格执行此操作的效率较低的方式。 如果目标是使用vlookup填充单元格然后处理公式,一种有效的方法是:

.Range("M2:L" & lastrow).FormulaR1C1 = "=VLOOKUP(RC[-1], Sheet2!R1C1:R4C10, 3, 0)"
.Range("M2:L" & lastrow).Value2 = .Range("M2:L" & lastrow).Value2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM