Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
VBA Addition
#1
Ich möchte die Woche jeweils Addieren und am Monatsende die Gesamtstunden dann haben.

mein derzeitiger Stand ist

Sub Berechnen()
    Dim z
    Dim Woche As Double
    Woche = 0
    arr = Sheets("Legende").Range("C7:N59")
    For z = 18 To 59
        i = indx(Cells(z, 1))
        If i > 0 Then
            If i < 1 Then Exit For
            Cells(z, 4) = arr(i, 5)                                                                        
            Cells(z, 5) = arr(i, 6)                                                                       
            Cells(z, 6) = arr(i, 6) - arr(i, 5): If Cells(z, 6) < 0 Then Cells(z, 6) = Cells(z, 6) + 1 

            Cells(z, 7) = arr(i, 7)                                                                      
            Cells(z, 8) = arr(i, 8)                                                                         
            Cells(z, 9) = arr(i, 8) - arr(i, 7)                                                          
           
            Cells(z, 10) = Cells(z, 9)                                                             
                       
            Cells(z, 12) = arr(i, 9)                                                                      
            Cells(z, 13) = arr(i, 10)                                                                   
            Cells(z, 14) = arr(i, 10) - arr(i, 9): If Cells(z, 14) < 0 Then Cells(z, 14) = Cells(z, 14) + 1
           
            Cells(z, 17) = arr(i, 1)                                                                      
           
            Cells(z, 19) = arr(i, 3)                                                                    
            Cells(z, 20) = arr(i, 4)                                                                      
            Cells(z, 21) = arr(i, 4) - arr(i, 3): If Cells(z, 21) < 0 Then Cells(z, 21) = Cells(z, 21) + 1
           
            Cells(z, 23) = arr(i, 7)                                                                    

        End If
    Next z
End Sub


[Bild: Addieren.png]

Eine Beispieldatei kann ich bei euch bestimmt auch Hochladen  Smile 
Ich werde es finden Angel 


Eine Nachberechnung habe ich DANK des Internet's auch schon
jedoch wollte ich das in der Sub Berechnung integrieren

Hier meine Nachberechnung

Sub Schicht_nachberechnen()
Dim R As Long 'R wie Row
Dim SumWoche
Dim SumMonat

    With ActiveSheet
   
    For R = 18 To 59
        Select Case .Cells(R, "C")
        Case "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"
            .Cells(R, "F") = .Cells(R, "E") - .Cells(R, "D") + IIf(.Cells(R, "E") < .Cells(R, "D"), 1, 0)
            SumWoche = SumWoche + .Cells(R, "F")
            SumMonat = SumMonat + .Cells(R, "F")
        Case Else
            .Cells(R, "F") = SumWoche
            SumWoche = 0
        End Select
    Next
    .Cells(60, "F") = SumMonat
    End With
End Sub

Mein Lösungsansatz war der

Sub Addition()
Dim Spalte As Integer
Dim x As Integer

Spalte = 6
For M = 1 To 20
Cells(10, Spalte).Value = Summe(Spalte)
Spalte = Spalte + 1
Next M
End Sub

Function Summe(Spalte As Integer)

Spalte1 = Spalte
Zeile1 = 3
With ActiveSheet
For N = 1 To 7
Summe = .Cells(Zeile1, Spalte1).Value + Summe
Zeile1 = Zeile1 + 1
Next N
End With
End Function
Zitieren
#2
Hallo,
warum willst du das mit VBA machen, geht sicher auch einfacher.
Tabelle mit Wunschergebnis würde helfen.

MfG Günter
(Win11, MS-Office 2021)
Wenn gelöst, dann bitte Thema als "Erledigt" kennzeichnen.
Zitieren
#3
Hallo redeagle56
Ich will VBA mal irgendwie verstehen :-)

Ja es geht auch einfacher, aber ich bin nie den einfachen Weg gegangen.

Wie kann ich den bei Euch eine Datei hochladen??

MfG Kuno
Zitieren
#4
(23.02.2022, 22:37)Kunoishi schrieb: Wie kann ich den bei Euch eine Datei hochladen??

Klicke auf Beitragsvorschau und dann ins Feld Attachments.

Aus dem eigentlichen Thema hier halte ich mich aber raus.

Gruß Ralf
Zitieren
#5
Danke RPP63

Beim Makro UNIT hab ich schon mal wieder angefangen zu Üben Angel Angry

Danke an die Runde

MfG Kuno


Angehängte Dateien
.xlsm   Addieren.xlsm (Größe: 52,33 KB / Downloads: 4)
Zitieren
#6
Hallo,

ich hätte ein paar Anmerkungen zum Handwerklichen; unsortiert.

Im Code zu Schicht_berechnen() hast Du If i < 1 Then Exit For drin. Das macht keinen Sinn, da Du zuvor auf > 0 geprüft hattest.
Im Code zur Funktion indx könntest Du die For-Schleife verlassen, wenn der Wert gefunden wurde.

Du referenzierst mit Cells(...), wodurch Du implizit das aktive Blatt adressierst. Es ist sauberer , eine vollständige Referenzierung
zu verwenden - beispielsweise ThisWorkbook.Worksheets("Januar").Cells(...) und ggf. mit Verwendung von With. Das eliminiert
mögliche Fehler.

Du deklarierst eine (unnötige) globale Variable arr, zudem noch in einem anderem Modul. Das macht es (später, wenn es mal
komplexer wird) schwerer lesbar. Zudem lassen sich Variablen (auch Arrays) an Prozeduren/Funktionen übergeben.

Du typisiert einige Variablen und andere wiederum nicht. Warum? Besser wäre es, das einheitlich zu gestalten und allen
Variablen einen Typ zu geben, wie Dim z As Long.

Integer brauchst Du in der Regel nicht mehr, nimm Long. Nicht verwendete Variablen sollten besser entfernt werden z.B. in
Woche in Schicht_berechnen.

Schreibe ganz oben im Modul als erste Zeile Option Explicit rein, was z.B. die Deklarieren von Variablen erfordert und auch vor
Tippfehler schützt. Nutze dann auch aus dem Menü Debuggen / Kompilieren.

Einrückungen sind gut und machen den Code lesbarer. Das würde ich dann aber konsequent in gleicher Form überall machen.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 01/2011 - 06/2019 :: 04/2020 - 06/2022
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner (neu)
Zitieren
#7
Hallo maninweb

Danke für die Anregungen !!!!

Ein oder zwei kann ich mehr oder weniger gleich umsetzen.
Bei den anderen könnte ich weitere Hilfe gebrauchen.
Ich freue mich auf jeden Fall über EURE weitere Unterstützung.

Mit den VBA bin ich erst seit kurzem auf Erkundungstur und es macht SPASS
und wenn ich hier und da jemanden finde, der mir was erklären kann um so mehr.

Wie mache ich das mit dem Wochenweise Addieren ?

Mfg Kuno


Angehängte Dateien
.xlsm   Kopie von 13.xlsm (Größe: 72,88 KB / Downloads: 1)
Zitieren
#8
(26.02.2022, 11:40)maninweb schrieb: Du referenzierst mit Cells(...), wodurch Du implizit das aktive Blatt adressierst. Es ist sauberer , eine vollständige Referenzierung
zu verwenden - beispielsweise ThisWorkbook.Worksheets("Januar").Cells(...) und ggf. mit Verwendung von With. Das eliminiert
mögliche Fehler.

Das verstehe ich nicht ganz (vieleicht Wissenslücke von mir)  Angel
Kannst du diesbezüglich naher darauf eingehen Smile

Ich habe dafür mein Beispiel schon mit hochgeladen

Danke
Zitieren
#9
Hallo,

ich habe Dir mal ein Modul erstellt (Schichtberechnungen), der das Berechnen und Nachberechnen der Schichten etwas sauberer implementiert.
Basierend auf Deinem Algorithmus. Der ist nicht optimal, aber das wäre ja hier erstmal egal. Bspw. ist das einzelne Beschreiben viele Zellen
langsam. Folgendes solltest Du noch berücksichtigen:

- Benenne bitte Deine Module, sodass Du auch später mal weisst, wo was ist.
- Bitte vollständig zu referenzieren, also auch Cells(...).Value statt nur Cells(...), auch wenn .Value dann die Standardeigenschaft ist.
- AutoOpen sollte nicht mehr verwendet werden, sondern Workbook_Open in DieseArbeitsmappe.
- Die Typen Deiner Variablen sollten korrekt sein, also z.B. kein Double wenn es eine Ganzzahl ist (Long).
- Mischen zwischen Cells(1,"C") und Cells(1,3) würde ich persönlich vermeiden.

Einen VBA-Kurs kann ich Dir an dieser Stelle nicht geben - mein persönlicher Eindruck ist, dass es Dir an Wissen in Bezug zu Datentypen,
Prozeduren & Variablen sowie insbesondere zu dem Excel-Objektmodell fehlt. Ohne Dein beachtliches Engagement schmählern zu wollen,
würde ich aber empfehlen, vielleicht ein Buch zu kaufen, wo didaktisch an VBA rangegangen wird.


.xlsm   Kunoishi.xlsm (Größe: 91,52 KB / Downloads: 1)

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 01/2011 - 06/2019 :: 04/2020 - 06/2022
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner (neu)
Zitieren
#10
Hallo maninweb

Ich bin ein wenig sprachlos und das sogar im Ganzen.
DANKE reicht eigentlich gar nicht.
Sie haben mir bestens geholfen und die Beschreibung zum Quelltext ist auch KLASSE.
Da kann selbst ich mich rein denken und ich bin manchmal nicht einfach.

Ich werde mit freude an diesem Projekt weitermachen und mich hier bestimmt wieder Melden Shy

mit freundlichen Gruß

Kunoishi

PS Soshite mōichido kansha shimasu Blush
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions