根据名字和姓氏查找 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/
我有一个列表,其中包含 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/