В списке из 3-значных чисел от 000 до 999 мне нужно найти числа, в которых хотя бы 2 цифры совпадают. Не могли бы вы помочь мне с формулой?
Я пробовал =IF(LEFT(A98,1) = "LEFT(A98,2)"OR LEFT(A98,2) = "LEFT(A98,3)" OR LEFT(A98,1) ="LEFT(A98,3)" , "0","1")
. Но я очень неопытен в Excel, и он не принимает эту формулу.
решение1
На самом деле это не так уж и далеко от истины.
Используйте MID()
вместо LEFT()
, поскольку LEFT()
для сравнения берутся все буквы, а не только одна.
Уберите ненужные кавычки, и это должно заработать:
IF(OR(MID(A98,1,1)=MID(A98,2,1),MID(A98,1,1)=MID(A98,3,1),MID(A98,2,1)=MID(A98,3,1)),"1","0")
Постарайтесь понять отрывки из написанного мной, чтобы вы могли исправить их, если я допустил опечатку или забыл скобку. У меня нет компьютера, чтобы проверить, и я печатаю с мобильного телефона.
решение2
Ответ Аганджу, вероятно, то, что вы ищете. Однако часто решение проблемы Excel приходит, если взглянуть на нее по-другому. Вот немного другой подход с парой идей, которые вы можете держать в заднем кармане.
ЛЕВЫЙ, ПРАВЫЙ, СРЕДНИЙ
Поскольку все состоит из трех цифр, мне проще думать о цифрах так:
LEFT(A98,1)
MID(A98,2,1)
RIGHT(A98,1)
Просто личные предпочтения, и это документирует, как использовать эти функции. Это самый левый 1 символ, средний, начиная с позиции 2 для длины 1, и самый правый 1 символ.
Обратное мышление
Вы подошли к этому со стороны поиска любой комбинации совпадающих цифр. Это требует некоторой комбинации IF, OR и/или AND. Если вы подойдете к этому с другой стороны, есть только одно условие, которое вы хотите исключить — все цифры должны быть разными. Тестирование для этого одного случая можно сделать проще.
Булева арифметика
Я объединю это с другим трюком. Вы ищете результат 1
or 0
, поэтому вы уже думаете в терминах тех, которые представляют true и false. Вы можете использовать некоторые математические свойства 0
and 1
:
- ноль раз что-либо равно нулю
- умножение кучи нулей дает ноль
- умножение кучи единиц дает единицу
- единственный способ, которым произведение нескольких нулей или единиц может дать единицу, это если все они — единицы
Собираем все вместе
Excel обрабатывает true
и false
как 1
и 0
. Таким образом, без необходимости использовать IF, AND или OR, вы можете использовать:
= (LEFT(A98,1)<>MID(A98,2,1)) * (LEFT(A98,1)<>RIGHT(A98,1)) * (MID(A98,2,1)<>RIGHT(A98,1))
Это дает 1
, если все цифры различны и 0
если какая-либо комбинация одинакова. Это различает вещи. Но если вы думаете, что должно быть наоборот, как вы описали в вопросе, вы можете обратить это, используя 1
минус этой формулы:
= 1 - (LEFT(A98,1)<>MID(A98,2,1)) * (LEFT(A98,1)<>RIGHT(A98,1)) * (MID(A98,2,1)<>RIGHT(A98,1))
Обратите внимание, что значения 0
or 1
выдаются непосредственно логическими тестами; не было необходимости присваивать эти значения результату на основе оценки условий.
решение3
Вот еще один немного другой способ, использующий идею @fixer1234 LEFT
MID
& RIGHT
и умножение на ноль:
=IF((LEFT(A99,1)-MID(A99,2,1)) * (LEFT(A99,1)-RIGHT(A99,1)) * (MID(A99,2,1)-RIGHT(A99,1))=0,1,0)
если какие-либо пары равны, результат умножения равен нулю, а результат умножения IF
равен 1.