公式数组中的dynamic范围

VBA新手在这里。 我试图通过Excel VBA使用数组公式,但我似乎无法指定dynamic范围。 我有:

Range("xyz").FormulaArray = "=somefunction(Data!RC:R[8]C[49])" 

但下次可能会

 Range("xyz").FormulaArray = "=somefunction(Data!RC:R[15]C[32])" 

这似乎并不奏效。 有没有解决这个问题?

如果是dynamic范围,则表示一个范围,其大小由VBAvariables(例如jRow和kCol)决定

 Range("xyz").FormulArrayR1C1 = "=somefunction(Data!RC:R[" _ & cstr(jRow) & "]C[" & cstr(kCol) & "])" 

如果你问如何确定在一个地区有多less行和列是被占用的

 Range.CurrentRegion Range.CurrentArray Range.End(xlUp).Row (also xlDown, xlRight, xlLeft) 

只要写下你的function,就好像你在第一个单元格中一样。 例如:

 Range("A1:C150")= "=C33*D21+Countif(G100:G500,"">0"")" 

在范围A1写入公式=C33*D21+Countif(G100:G500,">0")并将其应用于范围A1:C150

不确定你正在寻找什么,但也许这会有所帮助。 下面的代码使用“CountA”函数来检查指定范围内有多less个单元格中有数据(使用A1:A10,但可以是任何范围),然后将该数量的单元格从工作表1复制到工作表2。 这只有在数据是连续的(数据之间没有空白单元格)时才有效。

在工作表1,将一些数字在单元格A1:A5,例如…

 Sub DynamicRange() Dim CountA_Range As Range, intCountA_Result As Integer, CopyRange As Range Set CountA_Range = Worksheets(1).Range("A1:A10") intCountA_Result = WorksheetFunction.CountA(CountA_Range) Set CopyRange = ThisWorkbook.Worksheets(1).Rows("1:" & intCountA_Result) CopyRange.Copy Worksheets(2).Rows("1").PasteSpecial (xlPasteValues) End Sub