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
1112to1116
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

Makro: Werte auslesen, vorhandene kumulieren

Makro: Werte auslesen, vorhandene kumulieren
btc
Erneut Hallo, liebe Excel-Profis!
Vor kurzem bin ich dank 'Oberschlumpf' Thorsten meinem Gesamtziel eines Speisenkalkulationsfiles schon sehr viel näher gekommen. Leider habe ich mich beim Weitermachen beim nächsten Schritt etwas verheddert.
Hier zunächst mal die komplette Datei im konvertierten 2003er Format:
https://www.herber.de/bbs/user/65591.xls
Hier ist die gesamte Idee des fertigen Files:
Ein User gibt im Sheet 'Vorlage' den Namen und die Zutaten eines Gerichtes ein(für jeweils 100 Portionen). Bereits vorher einmal eingegebene Artikel sind im Sheet 'Preisliste' hinterlegt und per Dropdown verfügbar.
Nach fertiger Eingabe und Auslösen des ersten Buttons werden:
-Die Artikel mit Einheit und Preis in die Preisliste übertragen und alphabetisch sortiert, wenn sie noch nicht drinstehen
-Name des Gerichts und kalkulierter Bruttoverkaufspreis in das Sheet 'Preisempfehlungen' übertragen
-Der Name nochmals separat im Sheet 'Gerichtesammlung für Bestellung' gespeichert
-Das kalkulierte Gericht als neues Sheet mit dem Namen des Gerichts gespeichert
-die Vorlage zurückgesetzt.
Falls das Gericht als Beilage verwendet werden soll(z.B. Kartoffelsalat), kann man mittels dem zweiten Button dieses Gericht als Beilage in die Preisliste übertragen. Hierbei wird der Name des Gerichts mit "*" vorne versehen und ebenfalls als Artikel in das Sheet 'Preisliste' kopiert.
Bis hierhin funktioniert es dank Thorsten jetzt einwandfrei.
Nun der weitere Plan:
Im Sheet 'Gerichtesammlung für Bestellung' stehen in Spalte A alle Gerichte, in Spalte B kann man eine geschätzte Verkaufsmenge eintragen. Per Button soll nun folgendes passieren:
-jede Zeile in Spalte B wird überprüft. Ist der Wert über 0, geht es weiter:
-Der Name des Gerichts neben dem Wert wird übernommen (zB. Schnitzel)
-Es wird in das entsprechende Sheet gewechselt
-die Artikel der jeweiligen Kalkulation werden mit ihren Werten kopiert und in das Sheet 'Bestellliste' übertragen
-dabei wird schon die richtige Menge errechnet -> (Kalkulationsmenge / 100) * Verkaufsmenge
-sollten die Artikel schon in der Bestellliste stehen, werden nur die Werte kumuliert
Hier habe ich das erste Problem. Ich habe mir einen Code zusammengeschraubt, der wie folgt aussieht:
  • 
    Sub GerichtesammlungfürBestellung_RoundedRectangle1_Click()
    Dim Anzahl, Anzahl2, Startzeile, i, Umfang, Preis, KalkM, kalkM2 As Integer
    Dim c, c2 As Range
    Dim NameGericht, Artikel, Einheit As String
    For Each c In ActiveSheet.Range("b2:b500")
    If c.Value = 0 Then GoTo sprung Else
    NameGericht = c.Offset(0, -1).Value
    Anzahl = c.Value
    Sheets(NameGericht).Select
    Anzahl2 = WorksheetFunction.CountA(Sheets(NameGericht).Range("A3:A20"))
    For i = 1 To Anzahl2
    Startzeile = i + 2
    Artikel = Sheets(NameGericht).Cells(Startzeile, 1).Value
    Umfang = Sheets(NameGericht).Cells(Startzeile, 2).Value
    Einheit = Sheets(NameGericht).Cells(Startzeile, 3).Value
    Preis = Sheets(NameGericht).Cells(Startzeile, 4).Value
    KalkM = (Umfang * Anzahl) / 100
    Sheets("Bestellliste").Select
    For Each c2 In Sheets("Bestellliste").Range("a2:a500")
    If c2.Value = Artikel Then
    kalkM2 = c2.Offset(0, 1).Value + KalkM
    c2.Offset(0, 1).Value = kalkM2
    GoTo sprung2
    Else
    Cells(65000, 1).End(xlUp).Offset(1, 0).Value = Artikel
    Cells(65000, 2).End(xlUp).Offset(1, 0).Value = KalkM
    Cells(65000, 3).End(xlUp).Offset(1, 0).Value = Einheit
    Cells(65000, 4).End(xlUp).Offset(1, 0).Value = Preis
    GoTo sprung2
    End If
    Next c2
    sprung2:
    Next i
    sprung:
    Next c
    End Sub
    

    Leider wird hierbei nur die erste Zeile der Bestellliste gecheckt und bei Bedarf kumuliert, alle anderen Artikel werden doppelt eingetragen. Auch nach längerem Hin- und Hercodieren finde ich keine Lösung, wo mein Fehler liegt.
    Das zweite Problem:
    Wenn in der Artikelliste eines Gerichtes eine kalkulierte Beilage (mit "*", zB "*Kartoffelsalat" _
    ) vorkommt, dann sollen die einzelnen Artikel der Beilage auch ausgelesen werden. Meine Idee _ war, jeweils nach dem Kopieren einer Artikelzeile im Makro folgende Bedingung einzufügen:
    
    If Left(Artikel, 1) = "*" Then ArtikelBeilage = Right(Artikel, Len(Artikel) - 1)
    

    Damit hätte ich als String 'ArtikelBeilage' den Namen des Sheets, in dem die entsprechende Beilage kalkuliert ist und könnte dann dorthin wechseln und mit den einzelnen Artikeln auch so verfahren wie oben genannt.
    Leider komme ich mit der richtigen Verschachtelung und einer sinnvollen Codierung nicht zurecht. Beim Versuch, dies auch noch einzubauen, bricht mein Makro leider völlig zusammen.
    Gibt es jemanden, der mir hier einen Weg aufzeigen kann, wie ich das Ganze zum Laufen bringe?
    Da meine spärlichen VBA-Kenntnisse nur selbst-'ergooglet' sind, übersehe ich eventuell einen einfacheren oder sinnvolleren Weg, darum hoffe ich auf eine Erleuchtung von einem der zahllosen Profis hier.
    Vielen Dank schonmal fürs Lesen dieser langen Anfrage!
    Gruß
    Michael
  • 6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Benutzer
    Anzeige
    AW: Makro: Werte auslesen, vorhandene kumulieren
    04.11.2009 22:08:28
    Oberschlumpf
    Hi Michael
    ich mal wieder :-)
    Bevor ich so richtig loslege, habe ich noch eine Verständigungsfrage...und zwar.
    Zitat:
    Nun der weitere Plan:
    Im Sheet 'Gerichtesammlung für Bestellung' stehen in Spalte A alle Gerichte, in Spalte B kann man eine geschätzte Verkaufsmenge eintragen. Per Button soll nun folgendes passieren:
    ...
    ...
    -sollten die Artikel schon in der Bestellliste stehen, werden nur die Werte kumuliert

    Bei noch leerer Bestellliste sieht selbige nach Makro so aus (Bsp Schnitzel):
    Userbild
    Wenn ich jetzt in "Gerichtesammlung für Bestellung" noch mal auf den Button klicke, dann siehts in "Bestellliste" so aus:
    Userbild
    Ich habe also in "Gerichtesammlung für Bestellung" nix geändert (Schnitzel weiterhin für 200), aber die Werte in "Bestellliste" haben sich verdoppelt.
    nun meine Frage :-)
    Ist das genau so gewollt, oder wolltest du eigtl etwas anderes erreichen?
    (ich habe weder vom kaufmännischen (als Beruf) noch von der Gastronomie Ahnung, deswegen frage ich)
    Ciao
    Thorsten
    Anzeige
    AW: Makro: Werte auslesen, vorhandene kumulieren
    05.11.2009 00:29:53
    btc
    Hallo, Thorsten!
    Lang nicht mehr gesehen ;)
    Vielen Dank für die erneute schnelle Hilfe.
    Das ist in der Tat eine gute Frage, über die ich so noch gar nicht nachgedacht habe. Generell war der Gedanke, nach einer kompletten Kalkulation diverser Speisen einmal den Button zu klicken und die entstandene Bestellliste danach auszudrucken und wieder zu löschen. In diesem Fall wäre es ja kein Problem, weil der Button nur einmal pro Bestellung ausgelöst wird. Es wäre sogar problematisch, wenn jedes Gericht nur einmal ausgelesen wird, weil ich ja immer mal wieder was kalkulieren und bestellen muss.
    Nach deiner Frage kam mir jetzt aber der Gedanke, dass man ja bei einer Bestellung mal was vergessen oder ändern könnte. In meinen Augen ist die Wahrscheinlichkeit dafür aber eher gering.
    Daher meine Antwort:
    Wenn es (für dich) relativ einfach zu bewerkstelligen ist, dass bei erneutem Buttonklick eine MsgBox fragt, ob mit vorhandenen Daten kumuliert werden soll oder die Daten überschrieben/neu geschrieben werden sollen, dann begrüße ich diese Option. Wirklich nötig ist es allerdings nicht.
    Schonmal vielen Dank für deinen Einsatz!
    Gruß
    Michael
    Anzeige
    sooooo... :)
    05.11.2009 12:33:07
    Oberschlumpf
    Hi Michael
    ich habe fertig!!! (hoff ich zumindest...grins)
    Hier mein Versuch:
    https://www.herber.de/bbs/user/65606.xls
    zu Problem1:
    Nach Klick auf den textlosen Button in "Gerichtesammlung für Bestellung" werden nun, abhängig vom Wert in "benötigte Menge" alle Artikel in "Bestellliste" aufgelistet inkl. der richtigen Menge pro jeden Artikel.
    zu Nebenproblem in Problem1 (wegen Kumulierung)
    Das habe ich so gelöst, dass nun in "Bestellliste" vor JEDEM Start alle Einträge gelöscht werden.
    (auch, wenn du z Bsp zuerst nur für 100 Schnitzel bestellst, und später dann noch mal für 100 Kart.salate hinzufügst und ein 2. Mal auf den Button klickst)
    Obwohl ich selbst erst unsicher war, ob das so richtig ist, dazu hier ein Bsp für Pfanzenöl:
    100 x Schnitzel (es werden 3l Pflanzenöl benötigt)
    100 x Kartoffelsalat (es wird 1l Pflanzenöl benötigt)
    Ergebnis in der Bestellliste ist aber 5 l Pfanzenöl!!!
    (das irritierte mich zuerst, weil ja 3 + 1 = 4 ist)
    Ist aber deswegen 5, weil....
    ...für das Gericht Schnitzel 3l
    ...für das Gericht Kart.salat 1l
    ...aber das Gericht Schnitzel enthält als BEILAGE Kart.salat!!!
    Aus diesem Grund muss Kart.salat NICHT 100x sondern 200x bestellt werden, weil du ja Kart.salat als eigenes Gericht und Schnitzel MIT Kart.salat als eigenes Gericht anbieten willst. Und somit eben doppelte Menge für Kart.salat.
    Na ja, für dich mag das ja von Anfang an klar gewesen sein, und du schmunzelst jetzt vielleicht :-), aber wie gesagt, ich bin "nur" Techniker, aber kein Kaufmann und/oder Gastronom...Koch bin ich auch nich;-)
    zu Problem2:
    Jo, zu Anfang und ne Weile später immer noch :-) war es auch für mich ein Problem.
    Aber ich glaub, auch das hab ich gelöst...HALLELUJAAAA!!...hihi
    - es werden die Artikel eingelesen
    - sobald ein *-Artikel auftaucht, wird dieser gesondert von den vorherigen Artikeln ohne * in einem extra Sub auch mit For/Next-Schleife eingelesen
    - es erfolgt der Rücksprung zu den Artikeln ohne *
    - und diese werden nun weiter eingelesen
    Das Ganze funktioniert auch, wenn in der Zutatenliste eines *-Artikels ein weiterer *-Artikel erscheint.
    Als Testgericht habe ich Vanillepudding hinzugefügt, welches nun auch als Beilage für den Kart.salat vorhanden ist.
    bedeutet...z Bsp
    100 Schnitzel
    - Zutaten für Schnitzel werden in Bestellliste eingelesen
    ------- Zutaten für *Kart.salat werden eingelesen
    ------------ Zutaten für *Vanillepudding werden eingelesen
    ------- restl. Zutaten für *Kart.salat werden eingelesen (wenn vorhanden)
    - restl. Zutaten für Schnitzel werden eingelesen (wenn vorhanden)
    puhhhh...fertich!!!!....HOFFENTLICH :-)))
    Und? Läufts?...grins
    (trau dich ruhig, "nein + Erklärung" zu schreiben, wenn es so is :) )
    Ciao
    Thorsten
    Anzeige
    AW: sooooo... :)
    05.11.2009 13:17:19
    btc
    Hi Thorsten!
    Ich sag mal:
    WAHNSINN! Läuft wie Schnitzel (passt ja ;) )!
    Wenn ich jetzt noch wüsste, wie man sowas selber hinkriegt...
    Damit wenigstens noch etwas Kritik hier steht:
    In Vanillepudding muss noch Zucker rein... ;)
    Tausend Dank für die tolle und schnelle Umsetzung! Bist allerdings selber schuld, wenn ich jetzt größenwahnsinnig werde und alles in meinem Umfeld mit deiner Hilfe verformeln und codieren will. Jetzt weiß ich ja, dass es immer einen Weg gibt! :D
    Gruß
    Michael
    AW: sooooo... :)
    05.11.2009 14:18:39
    Oberschlumpf
    ich kauf die Fertigmischung von Vanillepudding...da is Zucker schon drin!...bähhhh :-P :-))
    Anzeige
    noch offen vergessen
    04.11.2009 22:08:58
    Oberschlumpf

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige