Excel数据验证下拉列表中的空白值

Excel数据验证下拉列表中的空白值,excel,vba,excel-2007,Excel,Vba,Excel 2007,我不知道从单元格A1到A65555将出现多少值。 我有B1,它设置了基于以下列的数据验证 A1:A65555 值在最多10行的列中显示。(从A1到A10) 但当我单击B1时,它会显示空值以及A1到A10。 我希望列的所有非空值都列在B1中 注意:我在数据验证设置中勾选了“忽略空白单元格”选项。 或者任何一位让我知道如何通过VBA设置数据验证?假设列A中没有间隙,只在列底部有一些空白行(如数据中始终是A1:A,其中1定义名称) 输入一些名称(如ValidationList) 将其用作公式=偏移量(

我不知道从单元格A1到A65555将出现多少值。 我有B1,它设置了基于以下列的数据验证 A1:A65555

值在最多10行的列中显示。(从A1到A10)

但当我单击B1时,它会显示空值以及A1到A10。 我希望列的所有非空值都列在B1中

注意:我在数据验证设置中勾选了“忽略空白单元格”选项。
或者任何一位让我知道如何通过VBA设置数据验证?

假设列A中没有间隙,只在列底部有一些空白行(如数据中始终是A1:A,其中1定义名称)

输入一些名称(如ValidationList)

将其用作公式
=偏移量(间接(“Sheet1!$A$1”)、0,0、COUNTA(Sheet1!$A:$A)、1)


然后将数据验证列表定义为您输入的名称(并再次选中忽略空格,以便在您未选择任何内容时不会出现错误)

我编写了一些代码,通过vba以编程方式插入数据验证并忽略空格,因此列表将更易于滚动

表格(“Whatsup_msg”)第J列中的验证,来自源表格(“电话和电子邮件”)第A列

Sub ValidateNonBlanks()
Dim lastRowCombo As Long
Dim lastRowSource As Long
Dim rangeSource As Range
Dim rangeCombo  As Range

lastRowCombo = 150
lastRowSource = Sheets("Phones_Emails").Cells(Rows.Count, "A").End(xlUp).row

Set rangeCombo = Sheets("Whatsup_msg").Range("J4:J" & lastRowCombo)
Set rangeSource = Sheets("Phones_Emails").Range("A4:A" & lastRowSource)

With rangeCombo.Validation
    .Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Phones_Emails!$A$2:$A$" & lastRowSource
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

End Sub

此外,“数据修正”对话框中的“忽略空白单元格”设置用于阻止受限制的单元格(在您的情况下,我想是对其应用了数据验证的单元格)如果单元格为空,则会出现“无效数据”错误。如果
A1:AM
中有空白单元格,则需要进行哪些更改,其中M是最后一行填充的行?我知道如何在VBA中执行此操作,但是否有一些非VBA的方法?可能,但处理任意大小和#间隙会非常混乱。我认为VBA会在这种情况下更容易。对于OP的需要,这个公式非常有效。