Вы можете выбрать AND
, чтобы добавить условие к уже написанной функции. например ниже проверяются позиции, которые должны быть числовыми.
=AND(COUNTIF(A1,"??_???-??_???_??-???"),ISNUMBER((LEFT(A1,2)&MID(A1,6,1)&MID(A1,8,2)&RIGHT(A1,3))+0))
Примечания. Это довольно простой подход, который может потребовать некоторых настроек, если у вас есть случаи, связанные с использованием десятичных знаков и т. д.
Изменить: вы можете попробовать следующий подход для проверки текста в верхнем регистре в указанных позициях.
=AND(COUNTIF(A1,"??_???-??_???_??-???"),ISNUMBER((LEFT(A1,2)&MID(A1,6,1)&MID(A1,8,2)&RIGHT(A1,3))+0),INDEX(FREQUENCY(-CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),{-91,-65,0}),2)=7)
Edit2: это оказалось сложнее, чем я себе представлял. Следующая формула работает в DV для ячейки A1
.
=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)
Но из-за какой-то причуды Excel не позволяет мне просто вставить его. Поэтому я написал небольшой код для того же, который применяет DV к ячейке A1
, и, что удивительно, он принимает ту же самую длинную формулу через код. Убедитесь, что вы удалили DV в ячейке, прежде чем запускать этот код.
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
Оказавшись там, вы можете получить его в любой другой ячейке, просто выполнив copy >> Paste Special >> Validation
.
Для наглядности я использую Excel 2016.
person
shrivallabha.redij
schedule
22.03.2020