2016-04-14 113 views
0

我在Excel中有以下表格設置。我期待填補與數組公式表,我已經在B列中試驗成功Excel FormulaR1C1和FormulaArray

enter image description here

下面的代碼自動填充表格的剩餘部分,但與數組公式,只是用公式,所以它不會返回所需的結果。我如何改變它以便數組公式被傳播?

請注意,用戶數量會發生變化,因此範圍的動態計算是一個固定的要求。

Dim LastCol As Long, LastRow As Long 
LastCol = Cells(2, Columns.Count).End(xlToLeft).Column 
LastRow = Cells(Rows.Count, "B").End(xlUp).Row 
Range("B3", Cells(LastRow, LastCol)).FormulaR1C1 Range("B3").FormulaR1C1 
+0

你可以把一個一次數組公式中的數組公式。或者,使用VBA的[Range.FillDown方法](https://msdn.microsoft.com/en-us/library/office/ff838404.aspx)和[Range.FillRight方法](https://msdn.microsoft.com /en-us/library/office/ff837984.aspx)。 – Jeeped

回答

0

編輯,因爲它沒有按預期工作。 還有兩種方法我會使用。 首先,最明顯的,是範圍.AutoFill方法:

Dim LastCol As Long, LastRow As Long 
LastCol = Cells(2, Columns.Count).End(xlToLeft).Column 
LastRow = Cells(Rows.Count, "B").End(xlUp).Row 
Range("B3").AutoFill Destination:=Range("B3", Cells(3, LastCol)), Type:=xlFillDefault 
Range("B3", Cells(3, LastCol)).AutoFill Destination:=Range("B3", Cells(LastRow, LastCol)), Type:=xlFillDefault 

工作正常,你可以很容易地控制公式將如何樣子。
另一種選擇是遍歷範圍內的所有單元格,只是複製公式,儘管它只是按照原樣複製公式,並且所有對原始查找單元格的引用都是相同的,我懷疑這是您尋找的內容,但在此處不過是:

Dim LastCol As Long, LastRow As Long 
LastCol = Cells(2, Columns.Count).End(xlToLeft).Column 
LastRow = Cells(Rows.Count, "B").End(xlUp).Row 
For i = 3 To LastRow 
    For j = 2 To LastCol 
     Cells(i, j).FormulaArray = Cells(3, 2).FormulaArray 
    Next j 
Next i 
+0

當我使用.FormulaR1C1然後當公式在整個範圍內傳播時,Column&Row值相應地改變,就像在複製/粘貼功能中看到的一樣。但是,當我用.FormulaArray替換.FormulaR1C1時,propogate的Column&Row值保持不變,就像我使用$ A $ 1類型的功能來凍結源一樣。 任何想法,爲什麼這是或如何解決?? –

+0

這裏是我的數組公式: - 工作!$ D $ 5:$(工作!$ A $ 5:$ A $ 5000 = $ A7)*(工作!$ A $ 5:$ R $ 5000,MATCH D $ 5000 = E $ 2),0),18) –

+0

如果您不介意等幾個小時,我會看到發生了什麼。除非有另外的答案可行。 我想嘗試遍歷每個單元格而不是將公式分配到整個範圍 –

0

回答這個問題對我的作品: -

Range("B3").Copy 

Dim LastCol As Long, LastRow As Long 
LastCol = Cells(2, Columns.Count).End(xlToLeft).Column 
LastRow = Cells(Rows.Count, "B").End(xlUp).Row 
'Range ("C3:F12") 
Range("C3", Cells(LastRow, LastCol)).Select 

Selection.PasteSpecial xlPasteFormulas 
Application.CutCopyMode = False 
0

我用這個來得到它的工作.........

Range("B3").Copy 

Dim LastCol As Long, LastRow As Long 
LastCol = Cells(2, Columns.Count).End(xlToLeft).Column 
LastRow = Cells(Rows.Count, "B").End(xlUp).Row 

Range("C3", Cells(LastRow, LastCol)).Select 

Selection.PasteSpecial xlPasteFormulas 
Application.CutCopyMode = False