Возвращает True, если две ячейки содержат определенные символы в Excel - PullRequest
0 голосов
/ 11 октября 2019

Ячейка A1: K+

Ячейка B1: P(K, G, Y)

Я хотел бы, чтобы она возвращала true в C1, если A1 содержит какие-либо символы в B1. Текущая формула, о которой я мог бы подумать:

IF(ISNUMBER(SEARCH(RIGHT(B1,LEN(B1)-2),B1))=LEFT(A1,1),"T","F")

Я знаю, что формула неверна, однако я застрял в определении правильной формулы.

Ответы [ 3 ]

0 голосов
/ 11 октября 2019

Попробуйте следующую пользовательскую функцию:

Public Function IsItInThere(v1 As String, v2 As String) As String
    Dim L As Long, i As Long
    L = Len(v1)
    IsItInThere = "F"
    For i = 1 To L
        If InStr(1, v2, Mid(v1, i, 1)) > 0 Then
            IsItInThere = "T"
            Exit Function
        End If
    Next i
End Function

enter image description here

Она последовательно выбирает каждый символ из первой строки и ищет его ввторая строка.

0 голосов
/ 11 октября 2019

Это массив формула:

=OR(IFERROR(FIND(MID(A1,ROW($A$1:INDEX($A:$A,LEN($A1))),1),$B1),FALSE))

Чтобы ввести / подтвердить формулу массива , удерживайте нажатой клавишу ctrl + shift при нажатии введите . Если вы сделаете это правильно, Excel поместит фигурные скобки {...} вокруг формулы, отображаемой на панели формул.

Для обычно вводимой формулы, если у вас есть функция AGGREGATE, вы можете использовать:

=IFERROR(AGGREGATE(14,6,FIND(MID(A1,ROW($A$1:INDEX($A:$A,LEN($A1))),1),$B1),1)>0,FALSE)

В формуле учитывается регистр. Чтобы сделать это без учета регистра, измените FIND на SEARCH

enter image description here

Алгоритм:

  • Split A1 в массив из одного символьного элемента:
    • MID($A1,ROW($A$1:INDEX($A:$A,LEN($A1))
  • Попробуйте FIND каждый символ в этом массиве в B1
    • Это будетвозвращает массив #VALUE! ошибок и цифр в зависимости от того, найден символ или нет.
  • IFERROR для возврата FALSE, так как FIND вернет ошибку, если это не такнайти персонажа.
    • Теперь у нас есть массив {TRUE,FALSE}
  • OR, затем вернет TRUE, если будет найден какой-либо из символов, иначе FALSE

Для функции AGGREGATE

  • Возвращается число> 0, если FIND соответствует чему-либо в B1.
    • AGGREGATE можно настроить так, чтобы игнорировать ошибки
  • Опять же, если ничего не найдено, AGGREGATE вернет ошибку, так как нет цифр,и IFERROR преобразует это в FALSE
0 голосов
/ 11 октября 2019

Попробуйте эту формулу без массива,

=ISNUMBER(LOOKUP(1,-FIND(MID(A1,ROW($A$1:INDEX($A:$A,LEN($A1))),1),B1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...