我不确定我的问题是关于VBA中的宏还是VLOOKUP类型的事情,但我会尽力解释它们。
我正在努力为人们制作一份时间表,让他们输入花在各种项目上的时间。它运作良好,但我正在尝试添加一项功能来分隔常规工资,加班工资或双倍工资的时间。
有三张名为时间日志,项目列表和时间表。
这是来自时间日志:
的图片
员工输入项目名称和项目编号,并使用VLOOKUP从项目列表中检索任务,然后员工输入他们为该工作收到的付款类型。在整个一周中,员工可以输入相同条目的倍数。
在本周末,他们会转到时间表并按下我附加到宏的按钮,该按钮将从中的所有条目中检索唯一值时间记录。
这是来自时间表:
的图片
正如您所看到的,我已经找到了唯一的项目名称,但现在我遇到了输入付款类型的问题。我不确定如何为每个唯一的项目名称和唯一类型绘制一个新条目。
理想情况下,它会像这样:
所以到目前为止,我的宏是在时间日志中搜索唯一项目名称并将其放入时间表:
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
所以这就是我被困的地方......我如何修改宏以便它寻找独特的项目名称&类型?如果我无法做到这一点,是否有办法使用VLOOKUP或类似方法来实现我的目标?
非常感谢所有人的帮助!
答案 0 :(得分:1)
你可以使用SortedList
对象:
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