2010-06-18 79 views
0

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

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

但下一次也可能是

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

这似乎并没有工作。有没有解决这个问题的方法?

回答

3

如果通过动态范围你的意思是一个范围,其大小由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) 
0

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

在worksheet1,把一些数字在单元格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 
1

只写你的功能,如果你在第一个单元格做。对于〔实施例:

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

您将在范围A1写公式=C33*D21+Countif(G100:G500,">0")和应对它得到相同的结果范围A1:C150