Ein ganz einfaches Bsp könnte so...
03.04.2009 03:20:08
Luc:-?
...aussehen, Dustbin...
Option Explicit
Sub Formelzeilen()
Const erstDatZl As Long = 1, erstKalkZl As Long = 1, _
erstKalkSp As Long = 1, KalkSpAnz As Long = 1
Dim DatZlAnz As Long
DatZlAnz = Sheets("Daten").UsedRange.Rows.Count - erstDatZl + 1
With Sheets("Kalk")
.Range(.Cells(erstKalkZl, erstKalkSp), .Cells(erstKalkZl + DatZlAnz - 1, _
erstKalkSp + KalkSpAnz - 1)).Formula = .Range(.Cells(erstKalkZl, erstKalkSp), _
.Cells(erstKalkZl, erstKalkSp + KalkSpAnz - 1)).Formula
End With
End Sub
Obenstehende Subroutine gehört in ein (normales) Modul, das du im VBEditor bei Rechtsklick auf das VB-Projekt deiner Mappe einfügen kannst. Damit du das bequem an dein Projekt anpassen kannst, habe ich am PgmAnfang 4 Constanten deklariert, deren Wert 1 du entsprechend austauschen musst:
erstDatZl = Nr der ersten Zeile von Blatt "Daten", in der formelrelevante Daten enthalten sind
erstKalkZl = Nr der ersten Zeile von Blatt "Kalkulation", in der auf "Daten" bezogene Formeln stehen
erstKalkSp = Nr (A=1) der 1.Spalte von Blatt "Kalkulation" mit auf "Daten" bezogenen Formeln
KalkSpAnz = Anzahl der Spalten von Blatt "Kalkulation" mit auf Blatt "Daten" bezogenen Formeln
Du musst auf Blatt "Kalkulation" nur Formeln in die 1.Kalk'zeile manuell eintragen. In alle weiteren benötigten Zeilen wdn sie automatisch eingetragen, wenn du unter Ribbon Ansicht - Makros Formelzeilen aufrufst.
Voraussetzung dafür ist...
1. unter xl12 das Anzeigenlassen des Ribbons Entwicklertools und das Zulassen von Projektmakros im Vertrauensstellungscenter;
2. Speichern als Datei mit Makros (.xlsm bzw falls sehr groß .xlsb);
3. das alle Zeilen einer Spalte analoge Formeln enthalten, die sich in gleicher, ununterbrochener Reihenfolge auf die entsprechenden Zeilen der Bezugsspalten aus Blatt "Daten" beziehen, die nicht unbedingt in der gleichen Zeile beginnen müssen wie die zugehörigen Formeln im Blatt "Kalkulation";
4. Analoges gilt für die Spalten, die selbstverständlich ebenfalls beliebig beginnen können, sich aber ohne Unterbrechung fortsetzen müssen. Anderenfalls wäre ein komplizierteres Pgm erforderlich.
Dazu müssen die o.g. Konstanten angepasst wdn!
Wenn außerdem noch eine automatische Formelzeilenerweiterung bei Hinzufügen weiterer Datenzeilen benötigt wird, muss zusätzlich eine Prozedur angelegt wdn, die auf dieses Ereignis reagiert. Am Einfachsten wäre es, hierfür Worksheet_Change zu verwenden. Dazu doppelklickst du im VBEditor auf Blatt "Daten" des Projekttrees, öffnest im Kopf des nun angezeigten leeren Blattes die linke Rubrik Worksheet und dann dazu die rechte Rubrik Change ⇒ der Rahmen der Prozedur wird angelegt. Die darin enthaltene Leerzeile ersetzt du durch ff.Befehle...
Const relDatSpBereich As String = "A:A"
If Not Intersect(Target, Range(relDatSpBereich)) Is Nothing Then
Call Formelzeilen
Set Target = Nothing
End If
relDatSpBereich ist dabei eine Textkonstante, deren Wert du durch die Angabe des Spaltenbereichs deines Blattes "Daten" ersetzen musst, in dem das Ausfüllen einer Zelle einer neuen Zeile den automatischen Aufruf des Pgms "Formelzeilen" bewirken soll. Eine Spalte reicht - zweckmäßigerweise die der jeweils letzten Eintragszelle der Zeile.
Natürlich lassen sich so auch noch komplexere Beziehungen realisieren, auch Berechnungen ohne Formeleintrag vornehmen, aber dieses Bsp sollte für den Anfang vollends ausreichen.
Gruß & Spaß Luc :-?