根据名字和姓氏查找ID

时间:2015-03-04 21:10:56

标签: excel-vba lookup excel-2013 vba excel

我有一个列表,其中包含Col A中的Employee ID,Col B中的First Name,Col C中的Last Name。我需要编写一个宏,使用户表单输入名字和姓氏,然后从那里输出将合适的员工ID写入Col E中第一个未使用的单元格,然后循环回用户表单。

我已经知道如何构建Userform并且其上有两个按钮,一个显示“Next”,另一个显示“End”。 “下一步”按钮将循环用户窗体,“结束”将关闭用户窗体。

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

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

对于错误捕获,我计划使用MsgBox状态“没有匹配的条目”。如果该人不在列表中。但是我不确定如何处理超级不可能但可能的情况,如果名单上的两个人有相同的名字。所以对此的任何建议将不胜感激。

我正在使用Excel 2013。

2 个答案:

答案 0 :(得分:2)

尝试使用下一个按钮

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

如果有多场比赛,我不确定采取什么样的最佳行动方案,所以现在我只是提供了一条消息来提醒你。更改代码以跟踪每个匹配的行而不仅仅是最后一行并不困难。

答案 1 :(得分:0)

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

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