Thema Datum  Von Nutzer Rating
Antwort
18.11.2024 09:09:37 Bea
Solved
Blau Stunden zusammenfassen
18.11.2024 14:22:22 Gast48504
NotSolved
19.11.2024 06:34:33 Gast58404
NotSolved

Ansicht des Beitrags:
Von:
Gast48504
Datum:
18.11.2024 14:22:22
Views:
41
Rating: Antwort:
  Ja
Thema:
Stunden zusammenfassen

Normaleweise ist das mittels Pivot-Tabelle mit eine paar Klicks erledigt; da bedarf es kein VBA dazu.

Da du aber nach einem VBA Ansatz gefragt hast, siehe unten...


 

Problem:

Funktion zur Auslesung der Monatsstunden pro Person, die in einem Monat mehrmals auftauchen kann.

Ganz unkompliziert eine Funktion dafür schreiben. Als Beispiel unten (Example) wird dessen Verwendung für das Tabellenblatt "Januar" demonstriert.

GetTotalHours geht in Spalte A alle Zeilen durch und merkt sich jeweils Name und Stunden in einem Dictionary. Der Name ist dabei der Schlüssel und der darunter gespeicherte Wert die Stunden; letztere werden aufsummiert.

Diese Funktion kann für alle Monate verwendet werden. Aus allen gesammelten Inforamtionen kann man dann die Gesamtstunden (Jahr) errechnen und auf dem Übersichtsblatt eintragen.

Grüße

' Modul: modTotalHours
Option Explicit

Public Sub Example()
  
  Dim wks As Excel.Worksheet
  Dim objResult As Object
  
  Set wks = ThisWorkbook.Worksheets("Januar") ' << Namen ggf. anpassen
  
  If GetTotalHours(wks, objResult) > 0 Then
    
    'weitere Verarbeitung / Ausgabe von objResult (nur als Beispiel)
    GoSub DebugPrintTotalHours
    
  End If
  
  Exit Sub
  
' Lokale Hilfsfunktion für Ausgabe im Direktfenster
' (STRG+G bzw. VBA Editor > Ansicht > Direktfenster)
DebugPrintTotalHours:
  
  Dim vntPerson As Variant
  
  Debug.Print "['"; wks.Name; "']"
  For Each vntPerson In objResult.Keys
    Debug.Print " * '"; vntPerson; "':"; Tab(25); CStr(objResult(vntPerson)); " hours"
  Next
  
  Return
  
End Sub

Public Function GetTotalHours(ByVal MonthWorksheet As Excel.Worksheet, ByRef TotalHoursByPerson As Object) As Long
  
  Const C_FIRST_ROW As Long = 2
  
  Dim objDic As Object
  Dim rngRow As Excel.Range
  Dim strFullName As String
  
  Set objDic = CreateObject("Scripting.Dictionary")
  objDic.CompareMode = VbCompareMethod.vbTextCompare
  
  With MonthWorksheet
    For Each rngRow In .Range(.Cells(C_FIRST_ROW, "A"), .Cells(.Rows.Count, "A").End(xlUp))
      strFullName = Trim$(.Cells(rngRow.Row, "A").Value)
      If Len(strFullName) > 0 Then
        objDic(strFullName) = CDbl(objDic(strFullName)) + CDbl(.Cells(rngRow.Row, "J").Value)
      End If
    Next
  End With
  
  Set TotalHoursByPerson = objDic
  GetTotalHours = TotalHoursByPerson.Count
  
End Function

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
18.11.2024 09:09:37 Bea
Solved
Blau Stunden zusammenfassen
18.11.2024 14:22:22 Gast48504
NotSolved
19.11.2024 06:34:33 Gast58404
NotSolved