公式数组中的动态范围

时间:2010-06-18 15:03:00

标签: excel vba

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

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

但下次可能

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

这似乎不起作用。这有什么解决方案吗?

3 个答案:

答案 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