如何在数据验证中使用表列的组合

时间:2018-01-25 14:51:42

标签: excel

我有一个名为table" Table1"。列名称包含名称,列姓氏包含姓氏。我希望列名称中的值在下拉列表中可用。出于某种奇怪的原因,我使用公式

"=Table1[Name]" 

它会返回错误,但是当我创建一个命名公式

rngNames = "=Table1[Name]"

我可以将它用作数据验证的源代码。我不明白为什么它不接受普通公式,但需要包含在命名公式中,但至少我得到了这部分工作。

我想要做的下一步是拥有" Surname,Name"可用于下拉列表。我不想(不能)在表格中添加额外的列。我做的是我创建了另一个命名公式

rngFullNames = "=Table1[Surname] & ", " & Table1[Name]"

在“名称管理器”窗口中,它似乎有效 - 我可以在“值列”中看到这样的列表:

{"Smith, John"; "Black, Joe",...}

但是当我尝试在数据验证中使用它时,它会返回错误。有关如何从两个表列创建下拉数据验证的任何建议,而没有明确创建一个额外的列来组合这两个?

2 个答案:

答案 0 :(得分:1)

数据验证无法使用excel错误消息中引发的不同列表/范围: 列表源必须是分隔列表,或对单个行或列的引用。

但是你可以使它适用于VBA:

Sub DataValidation()

Dim LastRow As Long
LastRow = Range("A" & Rows.Count).End(xlUp).Row


Dim MyList() As String, k As Integer
ReDim MyList(LastRow)
For k = 2 To LastRow
MyList(k) = CStr(Range("A" & k).Value & "; " & Range("B" & k).Value)
Next k

With Range("L2").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
         Operator:=xlBetween, Formula1:=Join(MyList, ",")
End With

End Sub

在我的代码中,数据验证将在L2中输入,具有姓氏的列从A2到最后一行,具有名称的列是B2到最后一行。

告诉我它是否有效,我很乐意调整它。

注意:不知何故,它不适用于“,”。使用“,”将名称和姓氏放在彼此之下而不是一起。这不是正常数据验证中唯一的问题。

答案 1 :(得分:0)

数据验证不支持组合列。

一件小事。如果要在数据验证中使用表格列,请将其与=INDIRECT("Table1[Name]")一起使用,即:

if (-1 == xmlFile.FullName.IndexOf("\\prog\\")) continue;