2016-04-14 8 views
0

Ich habe die folgende Tabelle in Excel eingerichtet. Ich suche den Rest der Tabelle mit der Matrixformel zu füllen, die ich in Spalte B erfolgreich erprobt habenExcel FormulaR1C1 und FormulaArray

enter image description here

Der Code unten in der Tabelle AutoFills, aber nicht mit einer Matrixformel, lediglich mit der Formel , sodass das erforderliche Ergebnis nicht zurückgegeben wird. Wie ändere ich es, damit die Matrixformel propagiert wird?

Beachten Sie, dass die Anzahl der Benutzer & Kurse ändert sich daher die dynamische Berechnung des Bereichs ist eine feste Anforderung.

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

Sie könnten setzen ein ll der Array-Formel auf einmal. Alternativ können Sie auch die VBA-Methode [Range.FillDown] (https://msdn.microsoft.com/en-us/library/office/ff838404.aspx) und die [Range.FillRight-Methode] (https://msdn.microsoft.com) verwenden /en-us/library/office/ff837984.aspx). – Jeeped

Antwort

0

Bearbeiten, da es nicht wie vorgesehen funktioniert hat. Dort zwei andere Methode würde ich verwenden. Erstens ist die offensichtlichste ist der Bereich .AutoFill Methode:

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 

der gut arbeitet, können Sie leicht steuern, wie die Formeln aussehen wird.
Die andere Option besteht darin, durch alle Zellen in Ihrem Bereich zu iterieren und kopieren Sie einfach die Formel, obwohl es nur die Formel kopiert, mit allen Verweisen auf die ursprüngliche Nachschlagezelle, und ich bezweifle, dass es das ist, was Sie suchen, aber hier dennoch ist:

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

Wenn ich .FormulaR1C1 verwende, dann werden die Column & Row-Werte entsprechend der Copy/Paste-Funktion geändert, wenn die Formel über den Bereich hinweg propagiert wird. Wenn ich jedoch .FormulaR1C1 durch .FormulaArray ersetze, bleiben die propagierten Column & Row-Werte erhalten, als ob ich eine $ A $ 1-Typ-Funktion zum Einfrieren der Quelle verwendet hätte. Irgendwelche Ideen, warum das ist, oder wie gelöst? –

+0

Hier ist meine Array-Formel: - = INDEX (Arbeiten! $ A $ 5: $ R $ 5000, MATCH (1, (Arbeiten! $ A $ 5: $ A $ 5000 = $ A7) * (Arbeiten! $ D $ 5: $ D $ 5000 = E $ 2), 0), 18) –

+0

Wenn es Ihnen nichts ausmacht, ein paar Stunden zu warten, werde ich sehen, was passiert. Es sei denn, es gibt eine andere Antwort, die funktioniert. Was ich versuchen würde, ist durch jede Zelle iterate statt Zuteilung Formel auf den gesamten Bereich –

0

Antwort, die für mich funktioniert: -

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

ich diese verwendet, um es Arbeit zu bekommen .........

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