Excel-VBA: AutoFill-Funktion Mehrere Zellen mit Formeln
Ich habe große Menge an Daten, die ich gesammelt aus verschiedenen Dateien. In diesem Haupt-Arbeitsmappe habe ich verschiedene Arten von Formeln für alle Zellen. Im Bereich von A bis F ist, wo die Daten aus anderen Dateien gesammelt. Im Bereich H zu AC, ich habe die Formel, die ich automatisch füllen, indem Sie Sie nach unten manuell jedes mal, wenn neue Daten eingegeben werden. Der code unten ist, was ich benutzt habe und es nur 6 verschiedene Formeln, die möchte ich automatisch füllen.
Application.ScreenUpdating = False
lastRow = Range("B" & Rows.Count).End(xlUp).Row
Range("D2").Formula = "=$L$1/$L$2"
Range("D2").AutoFill Destination:=Range("D2:D" & lastRow)
Range("E2").Formula = "=$B2/2116"
Range("E2").AutoFill Destination:=Range("E2:E" & lastRow)
Range("F2").Formula = "=$D$2+(3*SQRT(($D$2*(1-$D$2))/2116))"
Range("F2").AutoFill Destination:=Range("F2:F" & lastRow)
Range("G2").Formula = "=$D$2-(3*SQRT(($D$2*(1-$D$2))/2116))"
Range("G2").AutoFill Destination:=Range("G2:G" & lastRow)
Range("H2").Formula = "=IF($E2>=$F2,$E2,NA())"
Range("H2").AutoFill Destination:=Range("H2:H" & lastRow)
Range("I2").Formula = "=IF($E2<=$G2,$E2,NA())"
Range("I2").AutoFill Destination:=Range("I2:I" & lastRow)
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = True
Jedoch in der Haupt-Arbeitsmappe vorhanden ist, wie 15 verschiedene Formeln, die ich will, dass es automatisch füllen jedes mal, wenn neue Daten eingibt. Ich habe mehrere main-Arbeitsmappe, und die Formel ist nicht konstant. Einfügen der code oben für jede Formel ist ein Schmerz. Gibt es eine Möglichkeit, dass kann das Programm, ziehen Sie es automatisch runter? In der main-Arbeitsmappe, ich habe die Formeln geschrieben schon. Ich habe versucht, viele verschiedene codes, um es automatisch füllen, aber so weit oben ist die einzige, die arbeiten, ohne mir Fehler. Ich habe versucht, über so etwas wie dieses oder ähnliche version, aber keiner funktioniert:
With wbList.Sheets("Attribute - 10 mil stop")
lastRow = Worksheets(ActiveSheet.Name).Range("B2").Rows.Count
'Worksheets(ActiveSheet.Name).Range(Selection, Selection.End(xlDown)).Select
Worksheets(ActiveSheet.Name).Range("D2:I2").Select
Selection.AutoFill Destination:=Range("D2:I" & Range("B2" & Rows.Count).End(xlDown).Row)
End With
Ich Durcheinander herum mit dem code so viel. Ich weiß gar nicht, ob es wohl so zu sein. Danke für die Hilfe!
Ich würde empfehlen, drehen Sie Ihre Reihe von Daten in eine Tabelle oder listobject, dann wird es automatisch tun dies für Sie. Wenn Sie jemals eine weitere Spalte hinzufügen, die Sie nicht haben, um update-code in excel mache alles für Sie aus einer Füllung nach unten, wenn das hinzufügen von Zeilen, nach unten ausfüllen beim hinzufügen einer neuen berechneten Spalten, keine Notwendigkeit für VBA. Dies gibt Ihnen auch der große Vorteil der Verwendung von Formeln anstatt zu sagen:
=B2
können Sie =@ColumnHeader
und es wird mit dem Wert in dieser Spalte in dieser Zeile, macht Update-Formeln viel einfacher, vor allem, wenn Sie so viele Formeln zur Instandhaltung
InformationsquelleAutor user3233328 | 2014-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Ansatz, den Sie suchen, ist
FillDown
. Ein weiterer Weg, so dass Sie nicht haben, um Ihre kick aus den Kopf jedes mal ist die Speicherung von Formeln in ein array von strings. Die Kombination gibt Ihnen eine leistungsfähige Methode der Eingabe von Formeln durch die Menge. Code folgt:Screenshots:
Ergebnis aus Zeile:
.Range("C2:E2").Formula = strFormulas
:Ergebnis aus Zeile:
.Range("C2:E11").FillDown
:Natürlich, Sie können es durch dynamische Speicherung der letzten Zeile in eine variable und drehen Sie es in etwas wie
.Range("C2:E" & LRow).FillDown
, so wie das, was Sie getan haben.Hoffe, das hilft!
Tun Sie nur so etwas wie
.Range("C2:E" & LRow).HorizontalAlignment = xlCenter
nach der Zeile mitFillDown
. Hoffe, das hilft. 🙂InformationsquelleAutor Manhattan
Basierend auf meinen Kommentar, hier ist ein Weg, um zu bekommen, was Sie wollen, getan:
Start byt auswählen einer Zelle im Bereich, und Drücken Sie Strg + T
Diese geben Sie dieses pop-up:
stellen Sie sicher, dass das, Wo Ihr Tisch ist text korrekt ist, und klicken Sie auf ok, werden Sie jetzt haben:
Fügen Sie nun die Kopfzeile einer Spalte, in D wird es automatisch zur Tabelle Hinzugefügt werden alle der Weg zu der letzten Zeile:
Nun, Wenn Sie geben Sie eine Formel in dieser Spalte:
Nachdem Sie es betreten, die Formel wird automatisch gefüllt, die alle den Weg zur letzten Zeile:
Fügen Sie nun eine neue Zeile an die nächste Zeile unter deiner Tabelle:
Einmal eingegeben, wird es in der Größe angepasst werden, um die Breite der Tabelle und Spalten mit den Formeln werden auch Hinzugefügt:
Hoffe, das löst Ihr problem!
Nicht sicher, wenn Sie tatsächlich Lesen Sie meine Antwort, es sieht lange aber es anzuwenden, alles, was Sie tun ist, drücken Sie 2 Tasten und fertig, nichts in den Computer bekommt, viel einfacher als das. 90% meiner Antwort zeigte Sie den nutzen. Diese Methode ist auch EXTREM sprunghaft schneller, da er nicht zu berechnen, die jede einzelne Zelle in die Formel Abschnitt des Arbeitsblattes, es wird nur noch 1 einzigen Formel in einer Zelle, wie Sie Sie hinzufügen, nicht die gesamte Spalte, Sie haben derzeit 22 berechnete Spalten, und selbst wenn Sie nur 100 Zeilen, das ist etwa 2.200 Zellen berechnet werden JEDER EINZELNE
Zeit, die Sie etwas eintragen. Wo, wie mir wird IMMER nur die Berechnung der 22 Spalten und nur das, was sich verändert hat. WIE Sie Ihre Daten wächst, werden Sie feststellen, meine braucht eine halbe Sekunde, während die andere Antwort wird einige Minuten dauern, um zu laden.
Da bin ich den Umgang mit codes, die ich verwenden möchte um die codes für diese auch. Aber nochmals danke und ich werde versuchen, implementieren Sie Ihre Lösung für meine anderen Probleme.
InformationsquelleAutor user2140261