Excel:如何在整个列中只允许一个值

时间:2018-05-11 06:28:55

标签: excel vba excel-vba

我正在开发一个excel模板,其中有100个或更多记录。 我有一个要求,在其中一个列中,用户需要输入帐户ID。现在,对于所有100条记录,此帐户ID必须相同。

通过VBA,我可以在用户再添加一行时添加帐户ID(使用VBA在“帐户ID”列中添加一行值)

我正在使用数据验证,这与从列

中删除重复值相反

= COUNTIF($ E $ 4:$ E $ 106 E4)<大于1

但这些是这个公式的问题

  1. 当我更改父单元格中的任何值,即E4时,我收到错误。

  2. 当我添加新行时,公式的值将从E4更改为E5。

  3. 我需要一个公式,我应该能够改变E4的值而不是E5的值。此外,当我添加新行时,它不应该增加。

    此外,还有一个VBA代码,用于验证列中是否包含单个值(在完整范围内表示E4:E104)

2 个答案:

答案 0 :(得分:1)

从E列中删除所有数据验证后,将其放入工作表的私有代码表(不是公共模块代码表)。

private sub worksheet_change(byval target as range)
    if not intersect(target, range("e:e"), usedrange.offset(3, 0)) is nothing then
        on error goto meh
        application.enableevents = false
        range(cells(4, "e"), cells(rows.count, "e").end(xlup)) = cells(4, "e").value2
    end if

meh:
    application.enableevents = true
end sub

答案 1 :(得分:0)

如果您拥有正确ID的多个副本,则用于验证的countif公式将返回true。如果你有不同的Id,它不会返回false,只要你有至少2的E4,当你把它改成另一个东西它变成假而你得到你的错误。

您应该使用和(确切地说($ E $ 4:$ E $ 104,E $ 4))进行验证