Ich bin mir nicht sicher, ob sich meine Frage auf ein Makro in VBA oder eine SVERWEIS-Art bezieht, aber ich werde mein Bestes geben, um beides zu erklären.
Ich versuche, einen Stundenzettel zu erstellen, in den die Leute ihre Zeit eintragen können, die sie an verschiedenen Projekten verbracht haben. Es funktioniert gut, aber ich versuche, eine Funktion hinzuzufügen, um die Zeit, die mit regulärer Bezahlung, Überstundenvergütung oder doppelter Arbeitszeitvergütung verbracht wird, zu trennen.
Es gibt drei Blätter mit den Namen Zeitprotokoll , Projektliste und Arbeitszeittabelle .
Dies ist ein Bild aus dem Zeitprotokoll :
Die Mitarbeiter geben den Projektnamen und die Projektnummer ein, und die Aufgabe wird mit SVERWEIS aus der Projektliste abgerufen , und dann gibt der Mitarbeiter die Art der Zahlung ein, die er für diese Arbeit erhält. Während der Woche kann ein Mitarbeiter ein Vielfaches der gleichen Einträge eingeben.
Am Ende der Woche gehen sie zu Timesheet und drücken eine Schaltfläche, die ich an ein Makro angehängt habe, das die eindeutigen Werte aus allen Einträgen im Time Log abruft .
Dies ist ein Bild aus der Arbeitszeittabelle :
Wie Sie sehen, habe ich es geschafft, die eindeutigen Projektnamen zu finden, aber jetzt habe ich ein Problem mit der eingegebenen Zahlungsart. Ich bin mir nicht sicher, wie es einen neuen Eintrag für jeden eindeutigen Projektnamen und eindeutigen Typ zeichnen soll .
Im Idealfall würde es so aussehen:
Was ich bisher habe, ist mein Makro, um das Zeitprotokoll nach eindeutigen Projektnamen zu durchsuchen und sie in Timesheet einzufügen :
Sub Input_Project_Names()
'
' Input_Project_Names Macro
'
' Clear Project Names
Worksheets("Timesheet").Range("A4:A50").ClearContents
'Advanced Filter from Time Log to Timesheet
Sheets("Time Log").Range("A1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Project List").Range("H1:H2"), _
CopyToRange:=ActiveSheet.Range("A3:A52"), _
Unique:=True
End Sub
Hier stecke ich also fest... Wie ändere ich das Makro so, dass es nach eindeutigen Projektnamen und -typen sucht? Und wenn ich dies nicht tun kann, gibt es eine Möglichkeit, SVERWEIS oder ähnliches zu verwenden, um mein Ziel zu erreichen?
Großen Dank für jede Hilfe!
Sie könnten SortedList
Objekt verwenden:
Option Explicit
Sub main()
Dim sortedList As Object
Set sortedList = CreateObject("System.Collections.SortedList")
Dim cell As Range
With Worksheets("Time Log") 'reference "Time Log" worksheet
For Each cell In .Range("A2", .cells(.Rows.Count, 1).End(xlUp)) 'loop thorugh referenced sheet column A cells from row 2 down to last not empty one
sortedList(cell.Value & "," & cell.Offset(, 3).Value) = cell.Resize(, 4).Value 'add current record to SortedList assigning "Project Name, Type" as ist key : it will do nothing if there's already a record with the same "Project Name" & "Type" key
Next
End With
Dim i As Long
With Worksheets("Time Sheet") ''reference "Time Sheet" worksheet
For i = 0 To sortedList.Count - 1 'loop through Sorted List object items
.cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 4).Value = sortedList.GetByIndex(i) 'write referenced sheet currently first empty row with current Sorted List item
Next
End With
End Sub
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen