Wie kann ich per excel macro Werte in zellen reduzieren

Hallo,

ich brauche nochmal Hilfe, Weiss aber gar nicht, wie ich das richtig erklären soll.

Also ich möchte per macro den Wert einer bestimmten Zeile solange von den darauf folgenden abziehen, bis er verbraucht ist, als beispiel mal eine vorher nachher Tabelle

tabelle

Also die Zahl in der Spalte Bestand soll erhalten bleiben, die Werte der folgenden Zellen aber entsprechend reduzieren.
Die Tabelle kann immer unterschiedliche Zeilenanzahl haben

hat jemand eine Idee?

Danke schöööön

Hallo,

warum soll es ein Makro sein?

Falls doch Formeln erlaubt sind:

Ich gehe davon aus, dass „Ist“ die Zelle A1 ist und wenn ich mich nicht vertue, sollte „Soll“ Zelle A10 sein.

B13: =WENN($A13>B4;0;B4-A13)
C13: =WENN($A13<=SUMME($B4:B4);C4;WENN($A13>=SUMME($B4:C4);0;SUMME($B4:C4)-$A13))

C13 beliebig nach rechts erweitern.
Die äußere Wenn-Funktion prüft, ob der Betrag von den vorherigen Beträgen bereits aufgebraucht wurde, die innere Wenn-Funktion prüft, ob es einen Restbetrag gibt.

In Spalte C markiert mir Excel die Zelle mit dem Hinweis „Die Formel in dieser Zelle bezieht sich auf einen Bereich, der an weitere Zahlen angrenzt“ und möchte die beiden rechten Summe-Funktionen auf die restliche Zeile erweitern. Du kannst die Zellen markieren und über das Kontextmenü den Hinweis ignorieren lassen, bei Änderungen kann es aber sein, dass der Hinweis wieder angezeigt wird. Ansonsten kannst du in C13 eine angepasste Formel verwenden, die aber nur in dieser Spalte funktioniert: =WENN(B13>0;C4;WENN(A13>=(B4+C4);0;B4+C4-A13)) hier kommt der Hinweis komischerweise nicht, allerdings musst du dann drei unterschiedliche Formeln verwenden.

Gruß
Tobias

Hallo,

mir ist gerade aufgefallen, dass man die äußere Wenn-Funktion einfacher gestalten kann: =WENN(B13>0;C4;WENN($A13>=SUMME($B4:C4);0;SUMME($B4:C4)-$A13))
Das wäre die Formel für C13 und ist nach rechts erweiterbar, allerdings taucht bei dieser Formel in allen Spalten, außer den letzten, wieder der Hinweis auf.

Gruß
Tobias

Hallo Tobias,

schon mal vielen Dank für deine schnelle Antwort.
Es sollte aber ein macro sein, weil ich nicht eine neue Tabelle erstellen will, sondern die bestehende ändern.
Per macro lade ich schon die Daten in Spalte A in die Tabelle und dann sollen sich im nöchsten Schritt die B4-7 usw anpassen.
Ich möchte also die bestehenden Zellen überschreiben

Leider keine Ahnung ob das geht

Vielen Dank
Martina

Hallo Martina
Per Macro lässt sich (fast) alles machen!

Sub Test()
Dim ccc, i, ttt$
ccc = Array(65, 98, 101, 114, 32, 105, 99, 104, 32, 118, 101, _
    114, 115, 116, 101, 104, 101, 32, 110, 105, 99, 104, 116, _
    44, 32, 119, 111, 32, 115, 105, 99, 104, 32, 119, 97, 110, _
    110, 32, 119, 97, 115, 32, 228, 110, 100, 101, 114, _
    110, 32, 115, 111, 108, 108, 46)
For i = 0 To 53
ttt = ttt & Chr(ccc(i))
Next i
MsgBox ttt
End Sub

Grüsse Niclaus

hihi witzig - schönes macro!!!

also ändern soll sich folgendes,
die Zahl in A4 ist in diesem Fall ja 10000, die soll bleiben wie sie ist, aber B4, B5, B6 usw, sollen sollen solange rduziert werden, bis die 10000 verbraucht sind, also im beispiel statt 5000 die 0, dann statt der 4000 die 0 - und jetzt sind von den 10000 schon 9000 verbraucht, also sollen sich die 4000 in D4 noch um die verbleibenden 1000 reduzieren also auf 3000

ist das jetzt logischer erklärt ?

danke schööön, das geht dann bestimmt auch per macro

Hallo Martina
Ich verstehe Dein Problem so wie weiter oben Tobias: Der Bereich A13:F16 soll berechnet werden aufgrund der Werte, die in A4:F7 vorgegeben sind - statt mit Formeln, wie es Tobias vorgeschlagen hat, soll das mit einem Makro geschehen.
Ist das richtig so?
Grüsse Niclaus

Hallo Niclaus,

nicht ganz, die Werte B4:F7 sollen ersetzt werden, die Tabelle A13:F17 ist nur die Veranschaulichung, wie die obere Tabelle dann aussehen soll.

viele grüsse
Martina

Hallo Martina
Jetzt ist mir alles klar - aber das umzusetzen, da bin ich noch am hirnen.
Für die Spalte2 habe ich schon mal etwas. Du kannst den ganzen Bereich A4:G7 markieren und dann folgendes Makro starten:

Sub test1()
For Each zelle In Selection
    If zelle.Column = 2 Then
        altwert = zelle
        bestand = zelle.Offset(0, -1)
        neuwert = ((bestand - altwert) < 0) * (bestand - altwert)
        zelle.Offset(0, 0) = neuwert
    End If
Next
End Sub

Ist die Spalte B jetzt richtig berechnet? Wenn ja: Machst Du allein weiter für die restlichen Spalten oder soll ich mich weiter damit beschäftigen? :slight_smile:

Grüsse Niclaus

hmmm, geht leider nicht, stoppt bei

neuwert = ((bestand -altweet) < 0) * (bestand-altwert)

bin echt zu blöd :frowning:

Hallo,

tut mir leid, dass ich nochmal nachhake aber was spricht denn gegen ein zweites Tabellenblatt?
Das erste Tabellenblatt mit den Ausgangswerten wird ausgeblendet und das zweite Tabellenblatt mit den Ergebnissen bleibt als einziges sichtbar.

Gruß
Tobias

Hallo Ihr beide
@tobias: Mit zweitem Tabellenblatt arbeiten, hatte ich auch überlegt.

@Martina:
Das muss stoppen, wenn Du altweet schreibst statt altwert!!

Aber dieses Makro ist hinfällig mit folgendem:

Sub MATRIX2()
lzei = Selection.Rows.Count  ' Anzahl Zeilen
lspa = Selection.Columns.Count  ' Anzahl Spalten
acr = ActiveCell.Row

For j = 1 To lzei
    acrn = acr + j - 1
    Cells(acrn, 1).Select
    Call Matrix22(lspa)
Next j
Cells(acr, 1).Select

End Sub

Sub Matrix22(lspa)

Dim altwert(100)
Dim neuwert(100)
For nn = 1 To 100
    altwert(nn) = Selection.Cells(1, nn)
Next nn

'SpalteA
bestand = altwert(1)
neuwert(1) = bestand

'SpalteB
i = 2
neuwert(i) = ((bestand - altwert(i)) < 0) * (bestand - altwert(i))

'SpalteC bis SpalteXX
For i = 3 To lspa
    sumaltwert = 0: sumneuwert = 0
        For saw = 2 To i
            sumaltwert = sumaltwert + altwert(saw)
        Next saw
        For snw = 2 To i - 1
            sumneuwert = sumneuwert + neuwert(snw)
        Next snw
    neuwert(i) = ((bestand - sumaltwert + sumneuwert) < 0) _
        * (bestand - sumaltwert + sumneuwert)
Next i
 
For cc = 1 To lspa
    Selection.Cells(1, cc) = neuwert(cc)
Next cc

finis1:
End Sub

Den Zahlenbereich markieren (ohne Spaltenüberschriften!) - in Deinem Beispiel also A4:F7 - und das Hauptmakro MATRIX2() starten.

Bei mir funktioniert das, wenn ich es genau eintippe. :wink: Ich hoffe bei Dir auch.
Grüsse Niclaus

Yeeeesssss!!!

Super , vielen Dank Niclaus, das klappt
habe ich schon in mein anderes macro integriert und auch da läuft es wunderbar.
1000 Dank, das hätte ich nie hinbekommen

@Tobias, dir aber auch vielen Dank, hatte auch schon mit den Formeln rumprobiert, aber da war ich anscheinend auch zu blöd

vielen vielen Dank euch beiden!

:grinning::grinning::grinning:

Das freut mich.
Grüsse Niclaus