根据名字和姓氏查找 ID

Finding ID based on first and last name

我有一个列表,其中包含 Col A 中的员工 ID、Col B 中的名字、Col C 中的姓氏。我需要编写一个宏,让用户表单输入名字和姓氏,然后从那里输入会将正确的员工 ID 放入 Col E 中第一个未使用的单元格中,然后循环回用户表单。

我已经知道如何构建用户窗体,上面有两个按钮,一个是 "Next",一个是 "End"。 "Next" 按钮将循环用户窗体,"End" 按钮将关闭用户窗体。

计划保留名为 Userform1 的用户窗体,并将输入框命名为 "FirstName" 和 "LastName"。所以我知道要从宏中引用这些,我会调用 Userform1.FirstName.Value 或 Userform1.LastName.Value,具体取决于我目前需要的部分。

我不确定的部分是如何匹配两个变量然后向左查找ID。如果有帮助,我可以将 ID Col 移到名称 Cols 之后,但我仍然不确定如何编写以使两个名称必须匹配。

至于错误捕获,我计划让 MsgBox 状态 "There are no matching entries." 如果列表中不存在此人。但是,如果列表中的两个人同名,我不确定如何处理这种不太可能但可能发生的情况。因此,对此的任何建议将不胜感激。

我正在使用 Excel 2013.

下一个按钮试试这个

Private Sub NextButton_Click()

Dim emptyRow As Long
Dim matchFound As Boolean
Dim matchCount As Long
Dim matchRow As Long
Dim i As Long

'Determine the first empty cell in column E
If Cells(1, 5).Value = "" Then
    emptyRow = 1
Else
    emptyRow = Cells(Columns(5).Rows.Count, 5).End(xlUp).Row + 1
End If

matchFound = False
matchCount = 0
matchRow = 0

'Loop through all of rows that have an employee id
For i = 1 To Cells(Columns(1).Rows.Count, 1).End(xlUp).Row
    If (UCase(FirstName.Value) = UCase(Cells(i, 2).Value)) And (UCase(LastName.Value) = UCase(Cells(i, 3).Value)) Then
        matchCount = matchCount + 1
        matchRow = i
        matchFound = True
    End If
Next

'Alert user of any errors
If matchFound = False Then
    MsgBox ("There are no matching entries")
ElseIf matchCount > 1 Then
    MsgBox ("There were multiple matches")
Else
'If there are no errors add employee id to the list
    Cells(emptyRow, 5).Value = Cells(matchRow, 1).Value
    emptyRow = emptyRow + 1
End If

'Clear the userform
FirstName.Text = ""
LastName.Text = ""

End Sub

我不确定如果有多个匹配项,最好采取什么行动,所以现在我只是添加了一条消息来提醒确定。更改代码以跟踪每一行而不是最后一行并不难。

我建议使用 vlookup,因为它基本上是围绕您的问题设计的。它接受一个输入,在一列中找到它,然后在不同的列中输出同一行。使输出依赖于匹配相同输出的两个 vlookup 应该不难。

http://www.howtogeek.com/howto/13780/using-vlookup-in-excel/