Entwicklung einer Anwendung zur Auswertung der Umsätze in VBA

  • Excel

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Entwicklung einer Anwendung zur Auswertung der Umsätze in VBA

    hallo zusammen,

    Ich muss momentan ein projekt lösen für die Berufschule, das ganze scheint mir schon sehr Komplex zu sein ich habe nämlich keine Ahnung wo ich mit der Lösung anfangen soll habe bereits Ansätze aber weiss nicht ob das so funktioniert. Wäre nett wenns sich das mal jemand anschaut und mir evtl. ein par Tipps geben kann. Im Anhang habe ich bereits eine Excel Datei wie das fertige Produkt aussehen soll alleredings ist noch nix Programmiert. Es sollen Diagramme entstehen die die Umsätze verschiedener Mitarbeiter auswerten und Neukunden / bestandskunden selektieren die 2. Tabelle soll nach herstellern gehen. Ich hatte mir das so gedacht das, durch einen Suchlauf das Programm die WErte für das Diagramm ermittelt also alle umsätze von Schmitz addiert und nach neukunde usw.. sortiert und im Diagramm auspuckt. Ist sowas möglich z.b mit einer Fallauswahl ? Ihr könnte euch ja mal die Excel Tabelle anschaun vielleicht habt ihr auch eine Idee wie man das angehen kann. Diagramme erstellen lassen über VBA ist ja recht einfach aber ich weiss nicht wie ich die Daten entpsrechenden aus der Tabelle lesen kann.

    freundliche grüße Andreas P



    Edit: Der erste Ansatz welcher mir gerade einfiel ist die Kombination einer If Then Funktion mit einer Schleife. D.h. Er Läuft Zeile C runter If Mitarbeiter Schmitz Then addiert der der die Werte und das bis In Zeile C kein Schmitz mehr steht. Dannach daselbe mit dem nächsten Mitarbeiter. Ist das so lösbar ? Ebenfalls müsste ja noch mit eingebracht werden in welcher der 3 Kundengruppe der Umsatz gemacht wurde
    Dateien
    • Umsätze.xls

      (40,03 kB, 266 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „andreas_p88“ ()

    Das sieht schonmal sehr interessant aus danke schön ! Ich werds erstmal versuchen mit der Pivot Tabelle zu lösen ! die Programmierung eines buttons zu Erstellung der Pivot charts sollte sich hoffentlich nicht als all zu schwer heraustellen.
    Ich habs mal jetzt doch mit VBA probiert und bin zu folgendem ergebnis gekommen, leider funktioniert es noch nicht :


    Sub Umsaetze_berechnen()
    Dim IntZeile As Integer

    For IntZeile = 1 To 150

    If Cells(IntZeile, 6) = "Abels" And Cells(IntZeile, 8) = "Bestandskunde" Then
    Bestknd_Abels = Bestknd_Abels + Cells(IntZeile, 10)

    End If

    Next

    End Sub

    Ich glaube ich muss noch mehr schleifen einbauen oder ? Er soll jede Zeile prüfen ob dort Abels und bestandskunde steht wenn positiv soll er es in der variable Bestknd_abels addieren! die Schleife läuft aber er addiert nix !

    Jemand ne Idee ?
    1) In welchem Context läuft denn der Code?
    So wie er geschrieben ist, funktioniert er nur im Arbeitsblatt der Umsatzliste.
    2) Saubere Programmierung wäre, die Werte der Value-Eigenschaft zu verwenden:

    Visual Basic-Quellcode

    1. For IntZeile = 1 To 150
    2. If Cells(IntZeile, 6).Value = "Abels" And Cells(IntZeile, 8).Value = "Bestandskunde" Then Bestknd_Abels = Bestknd_Abels + Cells(IntZeile, 10).Value
    3. Next

    3) Hast du mal mit dem Debugger durchgesteppt und nachgeschaut, was in den einzelnen Zellen und Variablen steht?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Also es funktionierte doch schon hab ich gemerkt ! Mit value bestimme ich den Zellen inhalt ? Wenn ich schreibe value= Bestandskunde selektiert der dannach ob in der Zelle bestandskunde steht ? Danke für deine Hilfe aufejedenfall hab jetzt noch eine andere Frage: was muss ich schreiben damit die Funktion eine Zeile mit inhalt anspricht also quasi:

    Visual Basic-Quellcode

    1. For IntZeile = 1 To 150
    2. If Cells(IntZeile, 6).Value = "Zeile mit Inhalt" And Cells(IntZeile, 8).Value = "Bestandskunde" Then Bestknd_Abels = Bestknd_Abels + Cells(IntZeile, 10).Value Next


    Also wie heisst der platzhalter z.B. value=Zeile mit Inhalt
    Danke ! So damit hab ich alles was ich für die Auswertung brauche ! die entsprechenden werte lass ich in eine Tabelle auspucken und ein normales excel Diagramm nimmt die Werte auf. Falls doch noch was sein sollte meld ich mich hier in dem Thread. Danke nochmal !
    langsam komme ich immer besser mit den Befehlen in VBA zurecht ! mir ist jetzt eine neue Idee gekommen Ich möchte in einer Zelle nach einem Inhalt und suchen jdesmal wenn dort zum Beispiel steht Intel23584 Pentium soll der in der nächsten zeile schreiben Intel also quasi

    Visual Basic-Quellcode

    1. Sub hersteller()
    2. For IntZeile = 1 To 200
    3. If (Cells(IntZeile, 17)) = "*Intel*" Then
    4. Cells(IntZeile, 16).Value = "Intel"
    5. End If
    6. Next
    7. End Sub




    normalerweise bei suchfunktionen setzt man ja ein Wort in Sternchen das man aus dem Kontext heraus finden muss gibs da bei VBA ne andere schreibweise ?
    Danke ! Das Like hat mich jetzt gerettet, es funktioniert nun alles kann ich den gesuchten begriff auch mit OR verknüpfen Das er quasi wenns etwas anderes als die 5 gesuchten HErsteller ist sonstiges reinschreibt Im folgenden mal den gesamten Code für den Sub:

    Visual Basic-Quellcode

    1. Sub hersteller()
    2. Dim IntZeile As Integer
    3. For IntZeile = 1 To 200
    4. If (Cells(IntZeile, 17)) Like "*SonicWALL*" Then
    5. Cells(IntZeile, 19).Value = "SonicWALL"
    6. End If
    7. Next
    8. For IntZeile = 1 To 200
    9. If (Cells(IntZeile, 17)) Like "*Sophos*" Then
    10. Cells(IntZeile, 19).Value = "Sophos"
    11. End If
    12. Next
    13. For IntZeile = 1 To 200
    14. If (Cells(IntZeile, 17)) Like "*hewlett*" Then
    15. Cells(IntZeile, 19).Value = "HP"
    16. End If
    17. Next
    18. For IntZeile = 1 To 200
    19. If (Cells(IntZeile, 17)) Like "*Symantec*" Then
    20. Cells(IntZeile, 19).Value = "Symantec"
    21. End If
    22. Next
    23. For IntZeile = 1 To 200
    24. If (Cells(IntZeile, 17)) Like "*Trendmicro*" Then
    25. Cells(IntZeile, 19).Value = "Trendmicro"
    26. End If
    27. Next
    28. For IntZeile = 1 To 200
    29. If Not (Cells(IntZeile, 17)) Like "*Symantec*" Or "*Trendmicro*" Or "*Sophos*" Or "*SonicWALL*" Or "*hewlett" Then
    30. Cells(IntZeile, 19).Value = "Sonstige"
    31. End If
    32. Next




    EDIT: Hab wohl gerade gesehen das Or funktioniert nur mit 2 Bedingungen. Fällt dir ein Alternativer Ansatz für die lösung des Problems ein ?



    EDIT2: Hab gemerkt hab die schleife voll sinnlos gestaltet habs jetzt richtig :

    Visual Basic-Quellcode

    1. Dim IntZeile As Integer
    2. For IntZeile = 1 To 200
    3. If (Cells(IntZeile, 17)) Like "*SonicWALL*" Then
    4. Cells(IntZeile, 19).Value = "SonicWALL"
    5. ElseIf (Cells(IntZeile, 17)) Like "*Sophos*" Then
    6. Cells(IntZeile, 19).Value = "Sophos"
    7. ElseIf (Cells(IntZeile, 17)) Like "*hewlett*" Then
    8. Cells(IntZeile, 19).Value = "HP"
    9. ElseIf (Cells(IntZeile, 17)) Like "*Symantec*" Then
    10. Cells(IntZeile, 19).Value = "Symantec"
    11. ElseIf (Cells(IntZeile, 17)) Like "*Trendmicro*" Then
    12. Cells(IntZeile, 19).Value = "Trendmicro"
    13. Else
    14. (Cells(IntZeile, 17)) Like "*Symantec*" Or "*Trendmicro*" Or "*Sophos*" Or "*SonicWALL*" Or "*hewlett" Then
    15. Cells(IntZeile, 19).Value = "Sonstige"
    16. End If
    17. Next


    Allerdings funktioniert das mit den Sontigen immer noch nicht

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „andreas_p88“ ()

    Wie bestimme ich eine Range Von Cell( 2, 19) Abwärts

    Wenn du sicherstellen kannst, dass jede Zelle gefüllt ist:

    Visual Basic-Quellcode

    1. Range(Cells(2,19),Cells(2,19).End(xlDown))

    Wenn nicht:

    Visual Basic-Quellcode

    1. Range(Cells(2,19),Cells(Rows.Count,19).End(xlup))
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich komm mal wieder nicht weiter :( versuche jetzt seit mehreren Stunden folgendes:

    Wenn in Zeile Cellls.(Intzeile, 5).value ="12854" soll er die gesamte Zeile Löschen. hab das schon mit einer Schleife versucht aber irgendwas mache ich falsch.

    Ziel soll sein Eine abfrage zu Starten in der Umsätze tabelle wenn in einer Zeile eine bestimmte Artikelnummer ist soll er die gesamte Zeile rauslöschen so das bestimmte umsätze nicht drin stehen ! kann es sein das ich vorher eine Range festlegen muss ? Bitte um Hilfe!

    Danke! besonders an petaod welcher mir bereits kompetent geholfen hat !

    Visual Basic-Quellcode

    1. Rows(intZeile).Delete Shift:=xlUp

    Achtung Stolperstein!
    Die Zeilennummerierung ändert sich nach diesem Befehl!

    Tipp:
    Wenn du deine Zeilen-Schleife von unten nach oben zählst (von 200 bis 1) entkommst du dieser Falle.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Meinst du das ganze könnte dann so aussehen:



    Visual Basic-Quellcode

    1. Sub Dienstleistung_loeschen()
    2. Dim IntZeile As Integer
    3. For IntZeile = 200 To 1
    4. If Cells(IntZeile, 5).Value = "1029612" Then
    5. Rows(IntZeile).Delete Shift:=xlUp
    6. End If
    7. Next
    8. End Sub
    Vielen Dank!!! jetzt läuft es ! Um weitere Artikelnummer Abfragen in der Schleife zu erstellen geh ich dann davon aus das dann folgt:

    Visual Basic-Quellcode

    1. Sub Dienstleistung_loeschen()
    2. Dim IntZeile As Integer
    3. For IntZeile = 200 To 1 Step -1
    4. If Cells(IntZeile, 5).Value = "1008119" Then
    5. Rows(IntZeile).Delete Shift:=xlUp
    6. ElseIf Cells(IntZeile, 5).Value = "1039230" Then
    7. Rows(IntZeile).Delete Shift:=xlUp
    8. usw..
    9. usw..
    10. End If
    11. Next
    12. End Sub