Google 表格数据验证不拒绝无效输入
Google Sheets Data Validation not rejecting invalid input
我有一个 sheet,我在其中控制提供的服务,其中包含执行日期和结束日期的列。
这些列对无效日期进行数据验证,并且用户不输入周末或假期(列在同一点差的另一页上sheet)。所以必须是自定义公式验证。
验证公式:
=AND(ISDATE(K2)=TRUE;K2>=J2;WEEKDAY(K2)<>1;WEEKDAY(K2)<>7;COUNTIF(Holidays!$A:$A;"="&K2)=0)
也试过
=AND(ISDATE(K2)=TRUE;K2>=J2;WEEKDAY(K2)<>1;WEEKDAY(K2)<>7;ISNA(MATCH(K2;Holidays!$A:$A;0))=TRUE)
并且还尝试在两个选项上使用 INDIRECT("Holidays!$A:$A")
***K 列有数据验证和结论日期是输入。 J 列有执行日期。第 1 行有标题。
问题:
数据验证输入拒绝在前几个小时似乎工作正常,有时一整天,但在这段随机时间之后,它停止工作。实际上它确实有效,但是有红旗,即使 "Reject input" 选项仍然被选中。
我的猜测是问题出在另一个 sheet 中的引用,但我没有看到任何其他方法可以做到这一点,因为将假期列表包括到主要 sheet会污染它并且隐藏列不会那么实用,因为用户会不断更新列表。
有什么方法可以实现吗?
P.S。条件格式曾经 return 错误,即使在使用 INDIRECT 作为外部参考时也是如此,但现在 Google 似乎已经修复了它。
希望有人能帮助我。
数据验证的自定义公式:
=(ISDATE(A1))*
(WEEKDAY(A1, 2)<>6)*
(WEEKDAY(A1, 2)<>7)*
(NOT(REGEXMATCH(TO_TEXT(A1), TEXTJOIN("|", 1, INDIRECT("Sheet2!H:H")))))
条件格式的自定义公式(有效绿色):
=(ISDATE(A1))*
(WEEKDAY(A1, 2)<>6)*
(WEEKDAY(A1, 2)<>7)*
(NOT(REGEXMATCH(TO_TEXT(A1), TEXTJOIN("|", 1, INDIRECT("Sheet2!H:H")))))
条件格式的自定义公式(红色无效):
=((ISDATE(A1))*
(WEEKDAY(A1, 2)<>6)*
(WEEKDAY(A1, 2)<>7)*
(NOT(REGEXMATCH(TO_TEXT(A1), TEXTJOIN("|", 1, INDIRECT("Sheet2!H:H")))))=0)*
(A1<>"")
spreadsheet demo
我发现当用户将内容复制并粘贴到单元格中而不是输入时,会出现此问题,这是更大一部分信息的一部分。这将数据验证分解为 "pieces",因为复制和粘贴不包含数据验证。我不确定您是否属于这种情况,但这可能意味着培训用户仅复制和粘贴值或仅硬键入信息。
我有一个 sheet,我在其中控制提供的服务,其中包含执行日期和结束日期的列。 这些列对无效日期进行数据验证,并且用户不输入周末或假期(列在同一点差的另一页上sheet)。所以必须是自定义公式验证。
验证公式:
=AND(ISDATE(K2)=TRUE;K2>=J2;WEEKDAY(K2)<>1;WEEKDAY(K2)<>7;COUNTIF(Holidays!$A:$A;"="&K2)=0)
也试过
=AND(ISDATE(K2)=TRUE;K2>=J2;WEEKDAY(K2)<>1;WEEKDAY(K2)<>7;ISNA(MATCH(K2;Holidays!$A:$A;0))=TRUE)
并且还尝试在两个选项上使用 INDIRECT("Holidays!$A:$A")
***K 列有数据验证和结论日期是输入。 J 列有执行日期。第 1 行有标题。
问题: 数据验证输入拒绝在前几个小时似乎工作正常,有时一整天,但在这段随机时间之后,它停止工作。实际上它确实有效,但是有红旗,即使 "Reject input" 选项仍然被选中。
我的猜测是问题出在另一个 sheet 中的引用,但我没有看到任何其他方法可以做到这一点,因为将假期列表包括到主要 sheet会污染它并且隐藏列不会那么实用,因为用户会不断更新列表。
有什么方法可以实现吗?
P.S。条件格式曾经 return 错误,即使在使用 INDIRECT 作为外部参考时也是如此,但现在 Google 似乎已经修复了它。
希望有人能帮助我。
数据验证的自定义公式:
=(ISDATE(A1))*
(WEEKDAY(A1, 2)<>6)*
(WEEKDAY(A1, 2)<>7)*
(NOT(REGEXMATCH(TO_TEXT(A1), TEXTJOIN("|", 1, INDIRECT("Sheet2!H:H")))))
条件格式的自定义公式(有效绿色):
=(ISDATE(A1))*
(WEEKDAY(A1, 2)<>6)*
(WEEKDAY(A1, 2)<>7)*
(NOT(REGEXMATCH(TO_TEXT(A1), TEXTJOIN("|", 1, INDIRECT("Sheet2!H:H")))))
条件格式的自定义公式(红色无效):
=((ISDATE(A1))*
(WEEKDAY(A1, 2)<>6)*
(WEEKDAY(A1, 2)<>7)*
(NOT(REGEXMATCH(TO_TEXT(A1), TEXTJOIN("|", 1, INDIRECT("Sheet2!H:H")))))=0)*
(A1<>"")
spreadsheet demo
我发现当用户将内容复制并粘贴到单元格中而不是输入时,会出现此问题,这是更大一部分信息的一部分。这将数据验证分解为 "pieces",因为复制和粘贴不包含数据验证。我不确定您是否属于这种情况,但这可能意味着培训用户仅复制和粘贴值或仅硬键入信息。