Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
420to424
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
420to424
420to424
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro gesucht: Berechnung unter Bedingung ausführe

Makro gesucht: Berechnung unter Bedingung ausführe
Daniel
Guten Morgen!
Um das unnötige aufplustern eines Arbeitsblattes zu vermeiden suche ich ein Makro, dass bestimmte Berechnungen nur durchführt, wenn attsächlich Werte in den Zeilen vorhanden sind, auf denen die Berechnung durchzuführen sind.
Die Situation ist wie folgt:
Ich möchte die Berchnung = Blatt!D5/Blatt!C5 -1 durchführen.
Es sind jedoch nicht immer gelich viele Zeilen im "Blatt" belegt.
Daher suche ich ein Makro, dass diese Berechnung im Blatt "Rechnung" nur ausführt, wenn die Zeilen belegt sind.
Wie kann ich das machen?
Grüße
Daniel
AW: Makro gesucht: Berechnung unter Bedingung ausführe
Josef
Hallo Daniel!
Eine Möglichkeit wäre, die Berechnung auf Manuell zu stellen
und mit diesem Code in der Tabelle, immer nur die Zeile
zu berechnen in welcher eine änderung vorgenommen wird.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [C:C,D:D]) Is Nothing Then Exit Sub
Target.EntireRow.Calculate
End Sub

Gruß Sepp
Anzeige
AW: Makro gesucht: Berechnung unter Bedingung ausführe
Daniel
Hallo Sepp!
Nochmals danke für gestern Abend!
Diese Lösung kommt nicht in Frage, da sich die Zeilen nicht nach und nach ändern, sondern ich kopiere komplett neue Datensätze in ein Datenblatt. Und diese Sätze können erheblich abweichen (von wenigen Hundert Spalten bis 10000). Daher die angestrebte Lösung, damit die Datei nicht zu schwerfällig wird.
Hoffe das geht trotzdem irgendwie...
Daniel
AW: Makro gesucht: Berechnung unter Bedingung ausführe
Josef
Hallo Daniel!
Dann vielleicht so.
Option Explicit

Sub Berechnen()
Dim rng As Range
For Each rng In Range("C1:C1000") 'Bereich anpassen
If rng <> "" Then rng.EntireRow.Calculate
Next
End Sub

Berechnung natürlich auf Manuell!
Gruß Sepp
Anzeige
AW: Makro gesucht: Berechnung unter Bedingung ausführe
02.05.2004 11:55:02
Daniel
Hallo Sepp!
Das heißt aber dann, dass ich es nicht per Knopfdruck ausführen kann, oder?
Und es sollen ja -wenn möglich- keine Formeln in den Zellen stehen.
Siehe bitte auch mein anders Posting.
Grüße
Daniel
Oder per Knopfdruck
Josef
Hallo Daniel!
Oder wie du es wolltest, als separates Makro.
Die Ergebnisse werden in Tabelle "OH", Spalte "A"
untereinander geschrieben!

Sub Ergebnis()
Dim rng As Range
Dim lngE As Long
'Letzte gefüllte Zelle in Spalte "C" ermitteln
lngE = IIf(IsEmpty(Sheets("0").Range("C65536")), _
Sheets("0").Range("C65536").End(xlUp).Row, 65536)
Sheets("OH").Columns("A").ClearContents
For Each rng In Sheets("0").Range("C1:C" & lngE)
If rng <> "" And rng.Offset(0, 1) <> "" Then
Sheets("OH").Cells(Sheets("OH").Range("A65536").End(xlUp).Row + 1, 1) = _
rng / rng.Offset(0, 1) - 1
End If
Next
End Sub

Gruß Sepp
Anzeige
AW: Oder per Knopfdruck
Daniel
Hallo Sepp!
Zwei Dinge funtionieren noch nicht so wie geplant:
- Im Blatt "OH" sollen die Ergebnisse ab der ersten Zeile eingefügt werden
- Im Moment ist de Berechnung C/D -1 . Es oll aber D/C -1 sein.
Es wäre nett, wenn Du den Code kommentieren könntest, damit ich verstehe was da vor sich geht. Dann kann ich selbständig weiterarbeiten.
Vielen Dank!
Daniel
AW: Oder per Knopfdruck
Josef
Hallo Daniel!
So sollte es klappen!
Option Explicit

Sub Ergebnis()
Dim rng As Range
Dim lngE As Long 'für letzte gefüllte Zeile
Dim lngRow As Long 'Zeilenzähler in "OH"
lngRow = 1
'Letzte gefüllte Zelle in Spalte "C" ermitteln
lngE = IIf(IsEmpty(Sheets("0").Range("C65536")), _
Sheets("0").Range("C65536").End(xlUp).Row, 65536)
Sheets("OH").Columns("A").ClearContents 'Spalte "A" in "OH" löschen
For Each rng In Sheets("0").Range("C1:C" & lngE)
If rng <> "" And rng.Offset(0, 1) <> "" Then
'wenn Zelle in Spalte "C" und "D" gefüllt dann
Sheets("OH").Cells(lngRow, 1) = _
rng.Offset(0, 1) / rng - 1
lngRow = lngRow + 1 'Zeilenzähler erhöhen
End If
Next
End Sub

Gruß Sepp
Anzeige
Noch eine Frage
Daniel
Hallo Sepp!
Super, genau so habe ich mir das vorgestellt.
Noch eine Frage zwecks Vrständnis, damit ich damit weiterarbeiten kann:
Wenn ich nun statt in Spalte A in Spalte B schreiben möchte, und im Blatt "OH" Zelle F durch E teilen möchte, heißt das dann so?
Sheets("OH").Cells(lngRow, 2) = _
rng.Offset(0, 3) / rng.Offset(0, 2)
Hoffentlich stimmt das, sonst habe ichs nicht verstanden.
Gruß
Daniel
Stimmt!
02.05.2004 16:19:16
Josef
Hallo Daniel!
Stimmt genau!
Mit .Offset(Zeilenoffset, Spaltenoffset) greifst du
auf die entsprechenden Zellen, ausgehend von "rng", zu.
Und "rng" ist in deinem Fall eine Zelle der Spalte "C".
Mit dem Offset gibst du an, um wieviele Zeilen/Spalten
der bezug verschoben wird. (rechts/unten, oder mit negativen Zahlen links/oben)
Gruß Sepp
Anzeige
AW: Makro gesucht: Berechnung unter Bedingung ausf
Hans
Ein hübsches Makro und sooo sinnlos, weil Excel so konstruiert ist, das nur die Formeln neuberechnet werden, die von Änderungen betroffen sind. Es sei denn man verwendet flüchtige Funktionen...
PS: Damiel, will höchstvermutlich die Formel erst anlegen, wenn in den referenzierten Zellen Werte eingetragen werden - nur allein wo die Berechnung erfolgen soll bleibt sein Geheimnis und so kann ihm auch nicht geholfen werden :-(...
Gruß HW
Genau so soll es sein.
02.05.2004 11:52:57
Daniel
Hallo!
Ja, so möhcte ich es haben.
Ich mache da kein Geheimnis draus:
Im Tabellenblatt "0" befinden sich Daten, die zur Berechnung dienen.
Die Berechnung soll im Blatt "OH" stattfinden. Und zwar soll für jede Zeile im Blatt "0", in der sich Werte befinden im Blatt "OH" in Spalte A die Formel
= '0'!D1/'0'C1 -1 berechnet werden. Und zwar nur dann, wenn sich in den Zellen im Blatt "0" Werte befinden.
Das ganze soll per Knopfdruck auf ein Textfeld ausgeführt werden.
Danke für Hilfe!
Daniel
Anzeige

180 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige