несколько условий if и or в формуле excel

Мне нужно проверить значение ячейки D8:

Начинается с цифры или буквы, заканчивается на -f или -m

Затем, если 7-я цифра в последовательности меньше 5, но только если она действительно начинается с цифры, если она начинается с буквы, она должна проверять окончание -f или -m...

Вот что у меня есть:

=IF(ISNUMBER(VALUE(LEFT(D8,1), IF(--MID(D8,7,1)<5,"F","M"),IF(IFERROR(FIND("-F",D8),FALSE),"F","M"))

РЕДАКТИРОВАТЬ: если начать с числа, проверьте, является ли цифра 7 ‹ 5, если вы начинаете с буквы, посмотрите, заканчивается ли значение на -f или -m

если цифра 7 ‹ 5 результат = F иначе M если заканчивается на -f результат = F иначе M

и удостоверение личности, и паспорт записываются в D8, удостоверение личности только числовое, паспорта начинаются с букв.


person WebAcumen    schedule 18.11.2016    source источник
comment
Итак, в чем ваша проблема или вопрос?   -  person quantummind    schedule 18.11.2016
comment
Формула не работает. Мне нужно проверить, начинается ли оно с буквы, затем проверить окончание -f / -m, если оно начинается с цифры, проверить цифру 7, если она ‹ 5, но теперь она проверяет цифру 7 независимо от того, начинается ли она с буквы или нет, поэтому результат неверный. Это нужно для проверки того, является ли идентификатор учащегося ИЛИ пароль, находящиеся в одной и той же ячейке, мужским или женским, посмотрев на -f -m для букв и цифру 7 для идентификатора.   -  person WebAcumen    schedule 18.11.2016


Ответы (2)


Ваша формула не работает, потому что вы забыли некоторые (). Попробуй это

=IF(ISNUMBER(VALUE(LEFT(D8,1))), IF(--MID(D8,7,1)<5,"F","M"),IF(IFERROR(FIND("-F",D8),FALSE),"F","M"))
person L.Dutch    schedule 18.11.2016

Если вы открыты для UDF (используя VBA), регулярные выражения действительно хороши для этого типа задач, потому что они очень масштабируемы. Вы, конечно, можете сделать это из Excel, но ваш функционал уже очень трудно читать, и это не так сложно. Если вы начнете добавлять или изменять условия, простая неуместная скобка может все разрушить.

UDF легко читать, писать, отлаживать и поддерживать. Вот пример с использованием механизма регулярных выражений:

Function Checker(R As Range) As Boolean

  Dim result As Boolean
  Dim rxStartsLet As New RegExp
  Dim rxStartsNum As New RegExp
  Dim rxLessThan5 As New RegExp

  rxStartsLet.Pattern = "^[A-Za-z]"
  rxStartsNum.Pattern = "^[0-9]"
  rxLessThan5.Pattern = "[0-4]"

  If rxStartsNum.Test(R.Value2) Then
    result = rxLessThan5.Test(Mid(R.Value2, 7, 1))
  ElseIf rxStartsLet.Test(R.Value2) Then
    result = Right(R.Value2, 2) = "-F" Or Right(R.Value2, 2) = "-M"
  Else
    result = False
  End If

  Checker = result

End Function

И тогда ваша формула может читатель:

=If(Checker(D8), "M", "F")

Обратите внимание, что регулярное выражение может определять «меньше 5» без преобразования в число — в этом случае мы просто указали инклюзивный диапазон от 0 до 4.

person Hambone    schedule 18.11.2016