VBA新手在这里。我试图通过excel vba使用数组公式,但我似乎无法为公式指定动态范围。我有:
Range("xyz").FormulaArray = "=somefunction(Data!RC:R[8]C[49])"
但下次可能
Range("xyz").FormulaArray = "=somefunction(Data!RC:R[15]C[32])"
这似乎不起作用。这有什么解决方案吗?
答案 0 :(得分:2)
如果按动态范围表示大小由VBA变量确定的范围(例如jRow和kCol)那么
Range("xyz").FormulArrayR1C1 = "=somefunction(Data!RC:R[" _
& cstr(jRow) & "]C[" & cstr(kCol) & "])"
如果您询问如何确定区域中有多少行和列被占用,请参阅
Range.CurrentRegion
Range.CurrentArray
Range.End(xlUp).Row (also xlDown, xlRight, xlLeft)
答案 1 :(得分:1)
只需编写您的函数,就像您在第一个单元格中执行它一样。例如:
Range("A1:C150")= "=C33*D21+Countif(G100:G500,"">0"")"
通过在范围=C33*D21+Countif(G100:G500,">0")
中编写公式A1
并将其处理到范围A1:C150
答案 2 :(得分:0)
不确定您正在寻找什么,但也许这会有所帮助。下面的代码使用“CountA”函数来检查指定范围内有多少个单元格中的数据(使用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