首页 > 解决方案 > Excel:如何在整个列中只允许一个值

问题描述

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

通过 VBA,我可以在用户添加一行时附加帐户 ID(使用 VBA 在帐户 ID 列中添加具有值的行)

我正在使用数据验证,它与从列中删除重复值相反

=COUNTIF($E$4:$E$106,E4)<>1

但这些是这个公式的问题

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

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

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

此外,一个 VBA 代码验证一列是否有一个单一的值(在完整的范围内,如 E4:E104)

标签: vbaexcel

解决方案


从 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

推荐阅读