прочитайте пунктуацию в IF

прочитайте пунктуацию в IF
=IF(MID(B3,ROW(A:A),1)=MID(B3,LEN(B3)+1-ROW(A:A),1),"T")

Я читал «Палиндром» в ячейке B3 с помощью приведенной выше формулы, она работала нормально (если находить без знаков препинания и пробелов). Но когда я пытался прочитать «Палиндром» со знаками препинания и пробелами, она читалась некорректно.

например:-

B3:lol---->Палиндром B3:l ol---->Палиндром ........( но поскольку между l и ol есть пробел, это не должно быть палиндромом)

Я не понимаю, какие моменты я упустил в своей формуле? Может ли кто-нибудь помочь мне сделать мою формулу универсальной? Спасибо!


С уважением,

решение1

Ваша текущая формула имеет несколько крупных проблем, поэтому я очень удивлен, когда вы заявляете, что она «работает отлично».

Прежде всего, нет внешней функции, действующей на оператор IF. Следовательно, рассматриваются все элементы массива, кроме самого первого, полученные в результате сравнения. По сути, ваша формула вернет «T», если первая буква в вашей строке совпадает с последней: все остальные буквы в строке полностью избыточны, если это касается этого выражения. Согласно вашей формуле, такая строка, как ABCDEA, считается палиндромом. И именно поэтому ваш пример «L OL» возвращает «T» — средние символы просто не имеют значения.

Во-вторых, вы вводите формулу в виде массива, в котором записи целого столбца передаются в функцию ROW для генерации массива, который будет передан в качестве MID.начальный_номерпараметр. Это означает не только то, что Excel приходится генерировать массив, состоящий из более чем миллиона элементов (что требует поразительного и ненужного количества ресурсов), но и то, что ваш второй массив будет состоять из тысяч и тысяч отрицательных значений, что, конечно же, приведет к ошибкам при передаче в MID.

Пытаться:

=IF(SUMPRODUCT(N(MID(B3,ROW(INDEX(A:A,1):INDEX(A:A,LEN(B3))),1)<>MID(B3,LEN(B3)+1-ROW(INDEX(A:A,1):INDEX(A:A,LEN(B3))),1)))=0,"T","")

С уважением

Связанный контент