Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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
Arrays 在VBA中使用数组而不是范围_Arrays_Vba_Excel_Excel Formula - Fatal编程技术网

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

Arrays 在VBA中使用数组而不是范围,arrays,vba,excel,excel-formula,Arrays,Vba,Excel,Excel Formula,我现在只使用VBA几个星期了,所以请容忍我 我正在尝试更改宏,以便它从数组而不是范围中读取。其中一个部分我需要改变uses.formulaR1C1来运行一个vlookup,但是我很难弄清楚如何使用数组来实现这一点 这方面的一个例子如下所示: .Range("M2:L" & lastrow).FormulaR1C1 = "=VLOOKUP(RC[-1], Sheet2!R1C1:R4C10, 3, 0)" 我不太确定是否可以像上面那样将数组的值设置为公式,或者是否必须将值存储为字符串,然

我现在只使用VBA几个星期了,所以请容忍我

我正在尝试更改宏,以便它从数组而不是范围中读取。其中一个部分我需要改变uses.formulaR1C1来运行一个vlookup,但是我很难弄清楚如何使用数组来实现这一点

这方面的一个例子如下所示:

.Range("M2:L" & lastrow).FormulaR1C1 = "=VLOOKUP(RC[-1], Sheet2!R1C1:R4C10, 3, 0)"
我不太确定是否可以像上面那样将数组的值设置为公式,或者是否必须将值存储为字符串,然后在稍后将列打印回工作表时编辑单元格的值

到目前为止,我掌握的情况如下:

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

提前谢谢

您可以尝试使用
.Offset()

子测试()
最后一行=11
附页(1)
设置Rng=.Range(“M2:L”和lastrow)
以
对于i=0到Rng.Rows.Count-1
Rng.Offset(i,12).公式R1C1=“=VLOOKUP(RC[-1],表2!R1C1:R4C10,3,0)”
下一个
端接头

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

arr(i, 13) = "=VLOOKUP(RC[-1],WMSPAM!R1C1:R4C10,3,0)"
...
Range("M2").FormulaR1C1 = Arr(1,13)
我相信这种方法对您来说可能是最有效、最容易维护的方法。当你正在学习并且似乎对什么是可能的感到好奇时,这里有一些更多的例子说明你可以如何处理这个问题,并给出一些进一步的解释


.formula1c1
是一个范围对象方法,因此对数组项调用它的唯一方法是如果该项是范围对象

Dim arr(0 To 10) As Range
Set arr(0) = Range("A1")
arr(0).FormulaR1C1 = "=2+2"
请注意,由于范围是一个对象(引用类型),此操作将直接影响数组中指定的范围。在上述示例中,公式“=2+2”将被放入单元格
A1
。您可以进一步了解引用类型和值类型之间的区别


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

WorksheetFunction.VLookup(Arg1, Arg2, Arg3, Arg4)
与任何编写代码的方法一样,
WorksheetFunction
方法需要反复尝试才能让它们按预期的方式工作,但根据我的经验,这些方法可能很难实现,尽管在某些情况下它们非常有用


您可以阅读有关
VLookup
方法的更多信息

我不知道你在问什么。您的第一行代码以目前最有效的方式将公式写入两列范围,而第二行代码片段则以一次一个单元格的方式将公式写入两列范围。如果目标是使用vlookup填充单元格,然后处理公式,一种有效的方法是:

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

不能将数组设置为等于公式。您可以将其设置为包含公式,例如,
arr(i,13)=“=VLOOKUP(RC[-1],WMSPAM!R1C1:R4C10,3,0)”
然后当您将数组写回工作表时,您可以将
单元格。FormulaR1C1
属性设置为数组公式。谢谢Tom!这正是我需要知道的。您可以使用
应用程序。计算
来设置数组中公式的结果,但是我不确定您是否可以使用非显式R1C1表示法(例如
RC[-1]
)来实现它。为什么您首先需要对数组执行此操作?嗨,Omega,这只是代码的一小部分,而且它经常在数万行上运行,所以使用数组可以提高性能。嗨,omega,谢谢你的建议。我用ranges编写的代码是有效的,我只是想找到一种方法,使用arrayLooks让它工作,就像我将使用第一个选项一样。这类似于我头脑中的“变通方法”,但我不知道如何把笔写在纸上。谢谢你花时间解释@DMI没问题,谢谢你花时间在问题中恰当地解释你的问题和想法。很高兴能回答一个问题,这个问题不仅仅是“这是我的代码,请为我修复它”,不幸的是,这在VBA标记中似乎太常见了。