如何使用数据建议自动填充一行?

时间:2016-10-16 21:08:51

标签: excel vba excel-vba

上下文
在我的公司,一些助手填写Excel表,这是一个用户列表(名字,姓氏,ID号)。之后,我将此列表与PowerShell脚本一起使用。但通常用户列表未正确完成。例如,助理忘记输入身份证号码......。所以我希望帮助助手用数据建议/自动完成功能填写此Excel。

技术:
 在“数据”表中,我可以获得所有数据(名字,姓氏,ID号)。 使用“名称管理器”我创建了:

  • d_FirstName选择第一个单元格
  • c_FirstName选择所有列,
  • l_FirstName申请函数:=OFSSET(d_FirstName;0;0;COUNTA(c_FirstName)-1;1)

在“表单”表单中,我创建了具有以下功能的下拉列表:=IF(A1<>"";OFSSET(d_FirstName;MATCH(A1&"*";l_FirstName;0)-1;;SUMPRODUCT((MID(l_FirstName;1;LEN(A1))=TEXT(A1;"0"))*1));l_FirstName) 因此,当用户键入字母时,下拉列表会“建议”正确的FirstName。

问题:
如果用户仅键入名字,如何调整上一个查询,以完成,其中包含名字和姓氏以及相应的ID号?
例如:
如果用户在下拉列表中选择名字,Excel将完成与姓氏和ID号对应的lign。
如果用户在下拉列表中选择 ID号,Excel将使用姓氏和名字对应完成lign。

第二次,当用户输入一个字母时,如何自动显示下拉列表?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用组合框的属性和更改事件来完成此操作。组合框将采用1维或2维命名范围或返回范围的公式,因为它是RowSource。在这里,我将文本列设置为第3列。

enter image description here

enter image description here

Private Sub cboEmpID_Change()
    With cboEmpID
        If Not IsNull(.Value) Then
            lblEmployee.Caption = .List(.ListIndex, 1) & ", " & .List(.ListIndex, 0)
        End If
    End With
End Sub

Private Sub UserForm_Initialize()
    Dim ColumnWidths As String

    With Worksheets("Sheet1")
        ColumnWidths = .Columns(1).Width & ";" & .Columns(2).Width & ";" & .Columns(3).Width
    End With

    With cboEmpID
        .ColumnHeads = True
        .ColumnCount = 3
        .ColumnWidths = ColumnWidths
        .TextColumn = 3
        .ListWidth = Range("Sheet1!A:C").Width
        .RowSource = "OFFSET(Sheet1!$A$1,1,0,COUNTA(Sheet1!$A:$A)-1,3)"
    End With
End Sub

答案 1 :(得分:0)

您需要创建一个级联相关的Excel下拉列表。See