Thema Datum  Von Nutzer Rating
Antwort
05.09.2014 14:57:05 fc
NotSolved
Blau Erstellung Liste
08.09.2014 14:46:55 Gast3719
NotSolved

Ansicht des Beitrags:
Von:
Gast3719
Datum:
08.09.2014 14:46:55
Views:
640
Rating: Antwort:
  Ja
Thema:
Erstellung Liste

Hi fc,

dann verwende doch eine Collection (oder Dictionary). Damit kannst du über den Schlüssel (z.B. der Name der Person, was jedoch nicht immer eineindeutig ist) die Stunden aufsummieren und anschließend die Liste ausgeben.

Option Explicit

Sub Bsp01()
  
  Dim colEmployees As VBA.Collection
  Dim vntEmployee As Variant
  
  Set colEmployees = New VBA.Collection
  
  AddEmployee01 colEmployees, "Tobi", 1
  AddEmployee01 colEmployees, "Klaus", 0.82
  AddEmployee01 colEmployees, "Jasmin", 1.1
  
  AddEmployee01 colEmployees, "Karl", 0.4
  AddEmployee01 colEmployees, "Mia", 0.52
  AddEmployee01 colEmployees, "Jasmin", 0.75
  
  For Each vntEmployee In colEmployees
    Debug.Print Split(vntEmployee, ";")(0), CSng(Val(Split(vntEmployee, ";")(1)))
  Next
  
End Sub

Private Sub AddEmployee01(List As VBA.Collection, Name As String, Hours As Single)
  
  Dim v As Variant
  
  On Error Resume Next
    v = Split(List(Name), ";")
    v = Val(v(LBound(v) + 1))
    Call List.Remove(Name)
  On Error GoTo 0
  
  List.Add Key:=Name, _
          Item:=Name & ";" & Replace$(CSng(v) + Hours, Application.International(XlApplicationInternational.xlDecimalSeparator), ".", Count:=1)
  
End Sub

'##########################################

Sub Bsp02()
  
  Dim dicEmployees As Object
  Dim vntEmployees As Variant
  Dim i As Long
  
  Set dicEmployees = CreateObject("Scripting.Dictionary")
  dicEmployees.CompareMode = vbTextCompare
  
  AddEmployee02 dicEmployees, "Tobi", 1
  AddEmployee02 dicEmployees, "Klaus", 0.82
  AddEmployee02 dicEmployees, "Jasmin", 1.1
  
  AddEmployee02 dicEmployees, "Karl", 0.4
  AddEmployee02 dicEmployees, "Mia", 0.52
  AddEmployee02 dicEmployees, "Jasmin", 0.75
  
  vntEmployees = dicEmployees.Keys
  
  For i = LBound(vntEmployees) To UBound(vntEmployees)
    Debug.Print vntEmployees(i), dicEmployees(vntEmployees(i))
  Next
  
End Sub

Private Sub AddEmployee02(Dictionary As Object, Name As String, Hours As Single)
  
  Dim h As Single
  
  If Dictionary.Exists(Name) Then
    h = Dictionary(Name)
    Call Dictionary.Remove(Name)
  End If
  
  Dictionary.Add Key:=Name, Item:=h + Hours
  
End Sub

 


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
05.09.2014 14:57:05 fc
NotSolved
Blau Erstellung Liste
08.09.2014 14:46:55 Gast3719
NotSolved