Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1064to1068
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ausfüllen wenn ...

Ausfüllen wenn ...
01.04.2009 20:25:26
Dustbin2001
Hallo zusammen,
ich habe ein Frage zur Einsparung von Speicherkapazität.
Ich habe zwei Tabellenblätter (Daten und Kalkulation). In das Tabellenblatt Daten sollen Werte eingefügt werden. Dies können x-beliebig viele Zeilen sein, die Spalten sind fix vorgegeben. Das Tabellenblatt Kalkulation soll dann eine Kalkulation auf diese Daten vornehmen.
Gibt es eine Möglichkeit, dass im Tabellenblatt Kalkulation nur Formeln bis zu der Zeile stehen, wie es ausgefüllte Zeilen im Tabellenblatt Daten sind? Bisher habe ich in Kalkulation eine Formel, die einfach " " ausgibt wenn in der Zeile im Tabellenblatt Daten nichts mehr steht. Diese Formel habe ich, da ich ja nicht weiß wieviel Zeilen es in Daten sind, bis in Zeile 100.000 runterkopiert. Klar das klappt, frisst aber sehr viel Speicher. Gibt es eine andere Variante?
Eine Lösung ohne VBA wäre mein Favorit :-)
Hoffe ich konnte mich verständlich ausdrücken.
Gruß
Dustbin2001

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ohne VBA geht das mE nicht owT
01.04.2009 20:40:24
Matthias
JEIN! Unter best. Voraussetzungen...
02.04.2009 13:42:46
Luc:-?
...könnte es auch mit einer Matrixfml pro Spalte über alle vorhandenen Zeilen klappen, Matthias u. Dustbin,...
Dazu muss der Bezugsbereich INDIREKT angegeben und seine jeweilige Endzeile per FmlTeil ermittelt wdn. Allerdings bleibt da dann noch immer das Problem der automatischen Formelübertragung auf alle jeweils signifikanten Zeilen. Lösungen dafür gibt es, aber das ist dann wirklich VBA-gesteuert.
Die letzte Zeile könnte natürlich auch per VBA ermittelt und die fertige Fml dann per Pgm in die benötigten Zeilen eingetragen wdn.
Gruß Luc :-?
AW: JEIN! Unter best. Voraussetzungen...
02.04.2009 21:38:11
Dustbin2001
Hallo,
ok, leider kenne ich mich mit Makro nicht so recht aus.
Wie würde denn ein entsprechender Code für das Problem aussehen? Habt Ihr Erfahrung damit?
Gruß
Dustbin
Anzeige
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 :-?

Anzeige
War wohl 'ne 1Tagsfliege wie so oft... owT
07.04.2009 00:41:26
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige