Excel数据验证 - 填充的下拉列表

时间:2018-02-15 17:20:52

标签: excel list validation drop-down-menu

我在Sheet1上有这个主表:
工作 语言 姓名
1英文约翰
2法国弗兰克 3西班牙语 4英语詹姆斯
5英语约翰

我设法在语言列上设置数据验证,因此有一个包含语言的下拉列表。但是,我希望在列名称中有一个下拉菜单,其中任何人都可以使用Sheet2表格中的所选语言。

Sheet2看起来像这样 - 有语言和名称:

语言 姓名
英文约翰 英语詹姆斯
法国弗兰克 西班牙语 西班牙亚历杭德罗

正如您所看到的那样,每种语言都有多人。

有没有办法在下拉菜单中只显示所选语言的人?

像这样: 选择语言 - >仅显示在下拉列表中说出该语言的人

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在VBA代码编辑器(ALT + F11)中添加与事件CHANGE

连接的工作表函数

下面的VBA程序代码。 当您更改语言时,程序将启动。它使用sheet2中的人员列表更改所有数据验证列表。

如果程序在您的机器上正常工作,请给予支持。

Option Base 1

Private Sub Worksheet_Change(ByVal Target As Range)
Dim arrTemp() As Variant
Dim intNumberOfRowsSheet1 As Integer, intNumberOfRowsSheet2 As Integer
Dim i As Integer, j As Integer
Dim strCurrentLanguage As String
Dim wksSheet1 As Worksheet, wksSheet2 As Worksheet
Dim intNumberOfPersons As Integer

 Set wksSheet1 = Worksheets("sheet1")
 Set wksSheet2 = Worksheets("sheet2")

intNumberOfRowsSheet1 = wksSheet1.Range("a1").CurrentRegion.Rows.Count  'number of rows in sheet1
intNumberOfRowsSheet2 = wksSheet2.Range("a1").CurrentRegion.Rows.Count 'number of rows in sheet2

 If Target.Column = 2 Then     'execute when value in column 2 (language) changes

   For i = 2 To intNumberOfRowsSheet1
      strCurrentLanguage = Cells(i, 2).Value  
      intNumberOfPersons = 0
      ReDim arrTemp(1)
        For j = 2 To intNumberOfRowsSheet2
          If wksSheet2.Cells(j, 1) = strCurrentLanguage Then
            intNumberOfPersons = intNumberOfPersons + 1
            ReDim Preserve arrTemp(intNumberOfPersons)
            arrTemp(intNumberOfPersons) = wksSheet2.Cells(j, 2)
          End If
        Next j
      If intNumberOfPersons = 0 Then arrTemp(1) = "no persons speaks " & wksSheet1.Cells(i, 2)
      With wksSheet1.Cells(i, 3).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
         Operator:=xlBetween, Formula1:=Join(arrTemp, ",")
      End With
   Next i
 End If
End Sub