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",因为复制和粘贴不包含数据验证。我不确定您是否属于这种情况,但这可能意味着培训用户仅复制和粘贴值或仅硬键入信息。