[MS Excel] festen Wert aus allen Zeilen einer Spalte subtrahieren

TheRealScarred

Enthusiast
Thread Starter
Mitglied seit
31.10.2008
Beiträge
690
Hallo,

ich hoffe Ihr kennt euch mit Excel aus :fresse:

Folgende Herausforderung ist bei mir aufgetreten:

In Spalte G, Zeile 4 steht ein Wert. Dieser Wert soll von allen nachfolgenden Zeilen subtrahiert werden aber dabei soll in der Formel in den nachfolgenden Zeilen der ursprüngliche Wert der Zeilen erhalten bleiben. Wie kann ich das schnell automatisieren? Für jede Zeile einzelnd würde das ewig dauern.

Habe ein Screenshot gemacht um das zu verdeutlichen.




Kann da jemand helfen bitte?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Nö, du brauchst nur den absoluten Bezug zur Zelle mit dem festen Wert.
Normal arbeitet Excel mit relativen Bezügen.
Wenn du auf Zelle G4 referenzieren willst, dann ist der relativer Bezug G4.
Der absolute Bezug ist $G$4.
Wenn du jetzt in die Zeile 5 G5-G4 schreibst und das in Zeile 6 kopierst, dann würde Excel bei einem relativen Bezug in da G6-G5 rein schreiben.
Mit einem absoluten Bezug wäre das Ergebnis G6-$G$4.
Du schreibst die Formel also nur in die erste Zeile und kopierst das dann runter in alle anderen Zeilen und der Bezug auf G4 bleibt erhalten.
 
Zuletzt bearbeitet:
Du willst also quasi
Code:
G5 = G5 - G4
da stehen haben?

Ich würde dafür ne neue Spalte aufmachen (Meinetwegen Spalte H) und dann so:

Code:
H2 = G2 - $G$4

und das dann in alle Zellen der Spalte H kopieren.

Wie das sonst ohne zusätzliche Zellen gehen soll: Keine Ahnung, gute Frage :d
 
Das mit dem absoluten Bezug ist sehr gut, allerdings wenn ich es runter ziehe wird dann der Wert aus der vorherigen Zeile übernommen.

dann werde ich wohl eine neue Spalte aufmachen müssen.. Schade

Die Tabelle habe ich größtenteils selbst geschrieben.


Danke für eure Hilfe!
 
Das was du haben willst, lässt sich in Excel z. B. mit folgendem einfachen Makro lösen (speziell für dein Beispiel angepasst):

Code:
Sub Subtraktion_als_Formel_mit_Originalwert()

Dim Originalwert, Abzug As Double
Dim i, letzteZeile As Integer

letzteZeile = Worksheets("Tabelle1").Range("G:G").SpecialCells(xlCellTypeLastCell).Row-1
Abzug = Range("G4")

    For i = 5 To letzteZeile
        If Range("G" & i) = "" Then
        Range("G" & i) = ""
        Else
        Originalwert = Range("G" & i).Value
        Range("G" & i).FormulaLocal = "=" & Originalwert & "-" & Abzug
        End If
    Next

End Sub

Dieses Makro funktioniert so nur, wenn du die Zellen nicht verschiebst und das Tabellenblatt in dem du arbeitest noch "Tabelle1" heißt. Könnte man aber natürlich auch so schreiben, dass es in einem anders benannten, oder im aktuell geöffneten Tabellenblatt arbeitet und z.B. erst die Spalte mit dem Datum bei dem substituiert werden soll, bzw. in der ein abzuziehender Wert vorhanden ist, gesucht wird, so dass die Eintragung der von dir gewünschten "Zahlenformel" dann automatisch in dieser Spalte oder auch mehreren Spalten erfolgt (sollte es mehrmals vorkommen).

Angesichts dessen was du hier schriebst, gehe ich aber mal davon aus, dass du dich mit Excel nicht sonderlich auskennst und es daher als eine Art Taschenrechner oder als Ersatz für Zettel und Bleistift verstehst. Excel ist aber ein richtiges Tabellenkalkulationsprogramm und so wie du das lösen willst, macht man das eigentlich nicht.
Was du rechnest und wie du es später ausgibst sind zwei paar Stiefel die man sinnvoller Weise trennt (z. B. über verschiedene Tabellenblätter). Manuell eingegebene Werte, oder Zwischenergebnisse die benötigt werden, lässt man am besten immer in Ruhe und nutzt sie nur zum Rechnen bzw. Weiterrechnen in anderen Zellen. Wenn man sich nicht extra in die Möglichkeiten von VisualBasic in Excel einarbeiten will und sich daher nicht mit Makros behelfen kann, sondern sich rein auf Formeln beschränkt, sind dafür in der Regel zusätzliche Spalten oder Zeilen für Zwischenschritte die beste Wahl. Durch Ein- und Ausblenden von Spalten (oder Zeilen) lässt sich so auch recht einfach das gleiche Ausgabebild erreichen wie ohne zusätzliche Spalten.
Grundsätzlich solltest du dir in Excel aber angewöhnen, dass Zahlen nicht als Zahlen in Formeln stehen sollten, sondern stets als Bezug (egal ob relativ oder absolut). Formeln in denen Zahlen stehen, die keine festen unveränderlichen Faktoren, Divisoren oder Summanden sind, sollte man grundsätzlich vermeiden und ausschließlich mit Bezügen rechnen, wie es die anderen bereits vorgeschlagen haben. So vermeidet man auch Folgefehler.
 
Zuletzt bearbeitet:
Makro in Excel ist böse! - niemals per Email verschicken - wird (fast) überall geblockt...
einfalltor für alle arten von malware
für nur zuhause ist es OK
 
Deshalb muss man unbekannte Makros in Excel extra freigeben ;). Aber wenn du ein Makro selbst schreibst, ist es auch kein Einfallstor für Malware - schon gar nicht wenn es sich um simple VB-Workarounds wie obiges handelt und ActiveX-Steuerelemente sparsam verwendet werden. Für aktive Elemente gibt es zudem die Formular-Steuerelemente.
Wo Excel professionell verwendet wird, kommt man um Makros, wie auch um etwas ausgedehntere VB-Skripts in der Regel nicht herum. Zuhause für private Zwecke dürfte die Verwendung von Makros hingegen eher seltener sein, weil viele private Nutzer Excel eben bloß für einen erweiterten Taschenrechner halten ;). Gleiches gilt auch für VB in Access.

Was man im Hinblick auf Makros tatsächlich vermeiden sollte, ist das Ausführen fremder Excel-Dateien die Makros enthalten (bzw. deren Freigabe), speziell, wenn sie aus unbekannten oder unseriösen Quellen stammen.
Bei aus dem Netz kopiertem Quellcode, den man selbst als Makro einfügt, sollte man ihn lediglich einigermaßen verstehen bevor man ihn nutzt, dann kann da auch nichts passieren.
Wenn man ein eingebettetes Makro nicht verschicken will, weil *xlsm-Dateien beim Empfänger geblockt werden (wobei das auch nur diejenigen blocken die sie nicht nutzen, weil sie Excel selbst nicht intensiv nutzen), kann man es einfach so schicken wie obiges Beispiel ;). Dann kann da auch nichts schief gehen.

Generell Excel-Makros zu verteufeln führt jedenfalls dazu, dass man die Möglichkeiten die Excel bietet nur zum Bruchteil nutzen kann, denn Manches ist mit klassischen Formeln erheblich aufwändiger oder gar nicht machbar (z. B. das automatische Ersetzen eines Werts durch eine Formel in der der Wert als solcher wieder vorkommt, und auch noch dieselbe Zelle dafür verwendet werden soll). Man kann in Excel zwar auch ohne Makros recht weit kommen, aber gewisse Kompromisse wie zusätzliche Spalten und Zwischenrechnungen muss man dann eben eingehen und es kann je nach Aufgabe rein mit Formeln auch schnell ziemlich kompliziert und unübersichtlich werden.
Ich persönlich arbeite zwar nach wie vor viel lieber mit Formeln als mit VB, aber das ist eher eine Frage der Übung. Mit Formeln passiert es andererseits recht leicht, dass man selbst kaum noch durchblickt und für andere ist es dann noch schwerer, wenn sie mit diesen Dateien weiterarbeiten müssen. Bin selbst schon manchmal stundenlang an eigenen komplizierten Formeln gesessen die über viele Zeilen gingen, um wieder den Faden zu finden, was ich mir damals dabei gedacht habe und wie das ganze funktioniert. Da bringen VB-Makros z. B. den Vorteil, dass man sie einfach und übersichtlich kommentieren kann, so dass sogar Nutzer die keine Ahnung haben, verstehen können was passiert.
In vielen Fällen sind Makros aber auch einfach eine Erleichterung weil man damit einiges schneller rechnen kann. Bei Matrix-Formeln die große Arrays verarbeiten sollen, kann es z. B. schon mal vorkommen, dass sogar schnelle Rechner ganz schön ins schwitzen geraten. Da gibt es mit VB meist performantere Möglichkeiten.
Dafür kann man während dessen schön einen Kaffee trinken - von daher haben ausufernde Formel-Orgien ab und zu auch Ihre Vorteile :d.

Aber btt! Das schießt hier sonst angesichts des an sich ja einfachen Problems des TE imho etwas über´s Ziel hinaus. Nichts desto trotz ist exakt das Anliegen des TE rein mit Formeln in Excel nicht lösbar, wenn keine zusätzlichen Zellen dafür verwendet werden sollen. Da hilft eben nur ein kleines Makro wie obiges.
Der wesentliche Punkt ist aber, dass es überhaupt nicht sinnvoll ist, das Ziel zu verfolgen einen bestehenden Zahlenwert in eine Formel zu packen - noch dazu in derselben Zelle. Zahlenwerte haben, abgesehen von wenigen Ausnahmen, wie gesagt nichts in Formeln verloren. In Excel arbeitet man mit Bezügen.
 
Zuletzt bearbeitet:
@VJoe2max

danke für das Marko und die ausführliche Beschreibung. Ich werde dann ein neues Tabellenblatt aufmachen, wo die Werte korrigiert sind.

Ich bin noch recht neu in Excel und werde noch ein wenig brauchen um das ganze gut anzuwenden.
 
Vielleicht wäre auch ne leichtere Lösung möglich gewesen, wenn der Ursprung der anderen Werte in der Tabelle bekannt gewesen wäre.
Vielleicht ist dir beim absoluten Bezug auch nur ein kleiner Tippfehler unterlaufen. (Verwendete Musterformel zum "optimieren lassen" veröffentlichen?)
 
Bei Matrix-Formeln die große Arrays verarbeiten sollen, kann es z. B. schon mal vorkommen, dass sogar schnelle Rechner ganz schön ins schwitzen geraten. Da gibt es mit VB meist performantere Möglichkeiten. Dafür kann man während dessen schön einen Kaffee trinken - von daher haben ausufernde Formel-Orgien ab und zu auch Ihre Vorteile :d.

Dem kann ich nur beipflichten. Excel ist extrem langsam, wenn es um das Einlesen und schreiben von großen Mengen an Zellen von Tabellenblättern geht. Führt man das Ganze in einem Marko und mit virtuellen Arrays durch, ist es um ein vielfaches schneller. Grade solche Dinge wie "multipliziere alle Zellen der Tabelle mit X" oder "addiere X zur Tabelle" dauern ohne Makros ewig, weil Excel Tabellenblätter ziemlich langsam aktualisiert.

@Topic
Therealscarred:
Um mal bei deinem Ausgangsproblem zu bleiben... In Excel überschreibst du meist nicht den bestehenden Wert (also A1 = A1 + 5), sondern lässt den Ursprungswert unverändert und nutzt eine zweite Zelle mit Bezug zur Ersten. (Also B1 = A1 + 5). Das geht sowohl innerhalb eines Tabellenblatts oder auch auf einem separaten Tabellenblatt. Du kannst also für die Übersichtlichkeit die Ursprungswerte alle auf Blatt 1 lassen und dann ein zweites Blatt erstellen, auf dem alle Werte von Blatt1 (mit Bezug!) entsprechend addiert werden. So sind die Ursprungswerte auf Blatt 1 und dein gewünschtes Ergebnis auf Blatt 2. Du fügst neue Daten dann immer auf Blatt 1 hinzu, während du die Daten auf Blatt 2 abliest oder weiterverarbeitest.
 

Ähnliche Themen

Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh