2010-06-18 137 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