Справочная информация: Я столкнулся с необычным поведением при работе с пользовательской формулой проверки данных Excel.
Вот справочная ветка, с которой она началась.
Проверка данных Excel 2010 позволяет задавать c макет
В принципе, когда я пытался ввести следующую формулу в Excel Data Validation | Custom Formula
, тогда копирование / вставка просто не работали.
=AND(COUNTIF(A1,"??_???-??_???_??-???"),ISNUMBER((LEFT(A1,2)&MID(A1,6,1)&MID(A1,8,2)&RIGHT(A1,3))+0),MIN(FLOOR(CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),65))=65,MAX(CEILING(CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),90))=90)
Он принимал Копировать / Вставить до 65))=65
части, но оттуда не принимал. Я попытался ввести какой-то фиктивный текст в дополнение к вставленной части, которую принял Excel. Это привело меня к мысли, что формула может быть реализована через маршрут Excel VBA. Следующий код работает и добавляет DV в ячейку A1
.
With Range("A1")
.Value = "12_AB1-23_ADC_AZ-123"
.Validation.Add xlValidateCustom, , , "=AND(COUNTIF(A1,""??_???-??_???_??-???""),ISNUMBER((LEFT(A1,2)&MID(A1,6,1)&MID(A1,8,2)&RIGHT(A1,3))+0),MIN(FLOOR(CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),65))=65,MAX(CEILING(CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),90))=90)"
End With
У меня Excel 2016. Я подозреваю, что оригинальный плакат с гиперссылкой может также столкнуться с той же проблемой.
Вопрос:
Предел наверняка превышает 180 (один поиск в SO говорит 210: Как преодолеть ограничение максимальной длины формулы в Excel - ошибка Excel? ), но через VBA можно реализовать DV за этим пределом. Почему ограничение применяется только к блоку формул, поскольку Excel принимает ту же самую длинную формулу (длиной 271 символ) через макрос VBA?
Я думаю, что это какая-то ошибка в Excel.