Кто-нибудь может помочь мне с формулой, которая проверяет, находится ли значение между максимальным и минимальным значением с определенными доступными шагами? Пример: Доступные значения указаны как A1 = 1 (минимальный предел) B1 = 2 (максимальный предел) C1 = 0,2 (доступные шаги) Это означает, что доступными значениями будут: 1, 1,2, 1,4, 1,6, 1,8 и 2. Аналогично значение 1,1 недопустимо. Формула должна возвращать «Err», если значение в A2 не соответствует пределам и доступным шагам. Формула =IF(OR(A2B1);"Err";"ok") обрабатывает минимальные и максимальные пределы, но не доступные шаги.
решение1
используйте ЕСЛИ(СУММПРОИЗВ())
=IF(SUMPRODUCT(--(A1+C1*(ROW($ZZ$1:INDEX($ZZ:$ZZ,INT((B1-A1)/C1)+1))-1)=A2)),"OK","ERR")
(ROW($ZZ$1:INDEX($ZZ:$ZZ,INT((B1-A1)/C1)+1))-1
создает массив чисел от 0 до количества шагов, необходимых для достижения верхнего предела.
Затем этот массив передается в math: A1+C1*...=A2
и создается массив ИСТИНА/ЛОЖЬ. SUMPRODUCT подсчитывает ИСТИНА, и если таковая имеется, в данном случае это 1 или 0, If вернет ИСТИНА.
Используя динамические массивы (доступно только в Office 365), мы можем сократить это:
=IF(OR(SEQUENCE((B1-A1)/C1+1,,A1,C1)=A2),"OK","ERR")
Отредактируйте, чтобы избежать множества шагов:
=IFERROR(IF(AND(A2>=A1,A2<=B1,MOD(ROUND((A2-A1)/C1,10),1)=0),"OK","Err"),"Nb! Check ""Step"" input")
решение2
Столкнулся с парой проблем с формулой "=IF(SUMPRODUCT" -flu... 1) в формуле есть ограничение на количество возможных шагов 2) Я предпочитаю избегать использования $, так как формула широко копируется в разные рабочие книги.
Я придумал другую формулу (часть перед «Iferror» обрабатывает случаи, когда шаги не определены):
=ЕСЛИ(C1="";ЕСЛИ(И(A2>=МИН(A1:B1);A2<=МАКС(A1:B1));"ok";"Err");ЕСЛИОШИБКА(ЕСЛИ(И(ЦЕЛОЕ((A2-A1)/C1)=(A2-A1)/C1=ИСТИНА;(A2-A1)/C1<=(B1-A1)/C1;(A2-A1)/C1>=0);"ok";"Err");"Nb! Проверьте входные данные ""Step"""))
'Примечание! по какой-то причине формула выдает ошибку, которую я не могу понять. В приведенных ниже формулах я бы ожидал, что формулы INT в ячейках A6 и A10 будут равны 5.