Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1308to1312
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

Alte durch aktuelle Werte bei Subtraktion ersetzen

Alte durch aktuelle Werte bei Subtraktion ersetzen
25.04.2013 09:26:33
Jana
Hallo zusammen,
ich habe folgendes Problem und möchte es gerne mit VBA lösen:
Zwei Tabellen sind jeweils mit Werten gefüllt, die ich voneinander abziehen will.
Man könnte z.B. sagen, dass in der oberen Tabelle Liefermengen stehen, die jeweils geliefert werden können. In der unteren Tabelle stehen die Kapazitäten eines Lagers, das gefüllt werden soll.
Beispiel:
Produkt A soll geliefert werden und in Lagerstelle AA gelagert werden. Ich will mittels VBA erreichen, dass solange die Kapazität in A größer 0 ist diese gefüllt werden soll. Wenn diese Kapazität bei 0 ist oder die maximale Liefermenge erreicht ist, dann sollen die Ursprungswerte (hier die oberen zwei Tabellen) durch die neuen Werte ersetzt werden (unteren zwei Tabellen).
Ursprungswerte
Liefermengen:
______Produkt A | Produkt B
Lagerstelle AA| 3 | 2
Lagerstelle AB| 2 | 1
Lagerkapazität:
______Produkt A | Produkt B
Lagerstelle AA| 2 | 4
Lagerstelle AB| 2 | 2
Im vorliegenden Fall müssten dann die neuen Werte in den jeweiilgen Zellen zu sehen sein.
Neue Werte
Liefermengen:
______Produkt A | Produkt B
Lagerstelle AA| 1 | 0
Lagerstelle AB| 0 | 0
Lagerkapazität:
______Produkt A | Produkt B
Lagerstelle AA| 0 | 2
Lagerstelle AB| 0 | 1
Kann mir jemand unter die Arme greifen? Ich verzweifle so langsam.
Danke vorab für's Lesen!
LG Jana

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alte durch aktuelle Werte bei Subtraktion ersetzen
25.04.2013 09:33:42
Jana
EDIT:
Produkt A soll geliefert werden und in Lagerstelle AA gelagert werden. Ich will mittels VBA erreichen, dass solange die Kapazität in AA größer 0 ist diese gefüllt werden soll.

mit ner kleinen Schleife ist das ganz einfach ...
25.04.2013 12:06:27
Matthias
Hallo Jana
Der Bereich C5:D6 ist als Name Bereich definiert.
Tabelle1

 BCD
3Liefermengen
4 ProduktAProdukktB
5LagerstelleAA32
6LagerstelleAB21


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Mit folgender Schleife kannst Du nun die Werte aktualisieren.
Ich bin hierbei davon ausgegangen das
  1. die Liefermengen und

  2. die Lagerkarpazitäten

im selben Registerblatt stehen
Option Explicit Sub jana() Dim rng As Range, BER As Range, Anz&, x& Set BER = Range("Bereich") For Each rng In BER Anz = rng For x = Anz To 0 Step -1 If rng.Offset(5, 0) > 0 And rng > 0 Then rng = rng - 1 rng.Offset(5, 0) = rng.Offset(5, 0) - 1 End If Next Next End Sub Das Ergebnis:
Tabelle1

 BCD
3Liefermengen
4 ProduktAProdukktB
5LagerstelleAA10
6LagerstelleAB00
7   
8Lagerkapazität:
9 ProduktAProdukktB
10LagerstelleAA02
11LagerstelleAB01


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
https://www.herber.de/bbs/user/85055.xls
Gruß Matthias

Anzeige
AW: mit ner kleinen Schleife ist das ganz einfach ...
25.04.2013 14:57:10
Jana
Hi Matthias,
vielen Dank für deine Mühe und die schnelle Antwort :)
Ich konnte deinen Code soweit ganz gut nachvollziehen und hätte dennoch zwei Fragen:
1)"Der Bereich C5:D6 ist als Name Bereich definiert."
Wo sehe ich, dass dieser Bereich im Code zugeordent wird. Ich hätte jetzt etwas wie "Set Bereich = Sheets("Tabelle1").Range(C52:D6") erwartet.
2) Ist es möglich anstelle der Offset Anweisung einen flexibleren Bezug zu wählen? Z.B. indem man den Inhalt der Zelle C5 über die zwei Eigenschaften Lagerstelle AA und Produkt A anspricht?
Grüße Jana

Anzeige
AW: mit ner kleinen Schleife ist das ganz einfach ...
25.04.2013 17:31:55
Matthias
Hallo Jana
Userbild
Set BER = Range("Bereich")
Mit For Each rng In BER startest Du dann die Schleife
Deine 2.Frage verstehe ich nicht, sorry
Es ist doch flexibel durch die Offset-Anweisung

  • 5 Zeilen weiter unten

  • 0 Spalten nach rechts


Brauchst Du also einen anderen Bezug, dann ändere die Werte in Offset(5,0) so wie Du sie brauchst
Gruß Matthias

Lagerkarpazität und Liefermengen
26.04.2013 09:56:07
Matthias
Hallo Jana
Hab mal eine weitere Variante erstellt.
Vielleicht verstehst Du hier besser was es mit Offset() auf sich hat.
https://www.herber.de/bbs/user/85076.xls
Gruß Matthias

Anzeige
heißt natürl. Kapazität (capacitas ) sorry kwT
26.04.2013 12:27:37
Matthias

AW: heißt natürl. Kapazität (capacitas ) sorry kwT
26.04.2013 13:12:48
Jana
Hi Matthias,
wow, danke für die neu angelegte Excel-Datei und ausführliche Erklärung!
Habe jetzt alles verstanden. Bezüglich meiner 2. Frage habe ich mich nicht deutlich genug ausgedrückt. Ich meinte mit flexibl, dass ja der Offset-Bezug seine Gültigkeit verliert, wenn eine neue Zeile oder Spalte eingefügt wird oder eine der Tabellen verschoben wird. Aber ich bin blutige Anfängerin und muss step by step reinkommen. Daher reicht das so, wie du es mir gezeigt hast allemal :)
Deine Idee mit den mittleren Tabellen zur Wiederherstellung haben mich auf wiederum auf die Idee gebracht, dass man evtl. die Ausgangstabelle (also die linke Tabelle) beim Klick auf den Einlagerungsbutton als neue Kopie in die Mitte kopiert. Dann würde ganz links der neueste Stand angezeigt werden und in der Mitte der vorherige. Den vorherigen könnte man dann wieder über den Wiederhrstellungsbutton nach links kopieren.
So hätte man eine Art "Rückgängigfunktion" für den Fall das die Ausgangsdaten variieren.
Dachte das geht indem ich folgende zwei Befehle an folgender Stelle einfüge:
...Set BER = Range("Bereich")
Range("Bereich").Offset(0, 6).Value = Range("Bereich").Value
Range("I16:M23").Value = Range("Bereich").Offset(11, 0).Value
For Each rng In BER...
Klappt natürlich nicht :(
LG Jana

Anzeige
konzentrier Dich auf die linken Tabellen
26.04.2013 14:16:58
Matthias
Hallo
...Set BER = Range("Bereich")
'Das reicht schon (Blattschutz vorher entfernen!)
Range("Bereich").Offset(0, 6).Value = Range("Bereich").Value
Range("I16:M23").Value = Range("Bereich").Offset(11, 0).Value

For Each rng In BER...
Du solltest Dich aber auf die linken Tabellen konzentrieren! Eben Step by Step
Das macht mE auch so keinen Sinn, da es ja nur zur Demo mit drin war.
Gruß Matthias

AW: konzentrier Dich auf die linken Tabellen
27.04.2013 14:27:48
Jana
Ja, hatte den Blattschutz vergessen.
Danke für deine Hilfe, Matthias!
Liebe Grüße
Jana

Anzeige
Danke für die Rückmeldung ... kwT
27.04.2013 15:10:33
Matthias

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige