如何在多个列中搜索唯一文本,以将这些唯一行输入到其他工作表

时间:2018-06-15 22:14:45

标签: excel vba excel-vba unique vlookup

我不确定我的问题是关于VBA中的宏还是VLOOKUP类型的事情,但我会尽力解释它们。

我正在努力为人们制作一份时间表,让他们输入花在各种项目上的时间。它运作良好,但我正在尝试添加一项功能来分隔常规工资,加班工资或双倍工资的时间。

有三张名为时间日志项目列表时间表

这是来自时间日志

的图片

Time Log

员工输入项目名称和项目编号,并使用VLOOKUP从项目列表中检索任务,然后员工输入他们为该工作收到的付款类型。在整个一周中,员工可以输入相同条目的倍数。

在本周末,他们会转到时间表并按下我附加到宏的按钮,该按钮将从中的所有条目中检索唯一值时间记录

这是来自时间表

的图片

Timesheet

正如您所看到的,我已经找到了唯一的项目名称,但现在我遇到了输入付款类型的问题。我不确定如何为每个唯一的项目名称​​和唯一类型绘制一个新条目。

理想情况下,它会像这样: Timesheet Ideal

所以到目前为止,我的宏是在时间日志中搜索唯一项目名称并将其放入时间表

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或类似方法来实现我的目标?

非常感谢所有人的帮助!

1 个答案:

答案 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