У меня есть два столбца в Excel. Оба столбца содержат список строк, которые заканчиваются случайным символом. Формат префикса — две строки, соединенные подчеркиванием, а суффикс также добавляется подчеркиванием.
то есть
ABC_DEF_a => (prefix = "ABC_DEF", suffix = "a")
HJDSGDJ_KJ1_a10 => (prefix = "HJDSGDJ_KJ1", suffix = "a10"
Как мне сравнить, есть ли префикс в столбце B в столбце A?
Редактировать: Я знаю, что могу сделать это, разделив строку на три секции, а затем объединив первые две секции в один столбец, а затем проверив, находится ли столбец в другом с помощью VLOOKUP. Но я искал функцию oneliner.
решение1
Я предполагаю, что в ячейках A1 и B1 у вас есть:
А в столбце C есть TRUE
(VERDADEIRO) или FALSE
(FALSO), которые возвращают, равен ли префикс или нет. (извините за картинку на португальском языке)
Формула, к которой я пришел, такова:
=EXACT(LEFT(SUBSTITUTE(A1;"_";"\";2);SEARCH("\";SUBSTITUTE(A1;"_";"\";2))-1);LEFT(SUBSTITUTE(B1;"_";"\";2);SEARCH("\";SUBSTITUTE(B1;"_";"\";2))-1))
Объяснение:
=EXACT(str1,str2)
Он сравнивает, равны ли строки str1 и str2 или нет. Мы должны извлечь префикс из столбцов A и B. Для этого мы используем:
=LEFT(text, [num_chars])
Он извлекает [num_chars]
символы из строки text
. Чтобы узнать, сколько символов нам нужно извлечь, мы заменяем второе подчеркивание _
на фиктивный символ \
:
=SUBSTITUTE(text, old_text, new_text, [instance])
=SUBSTITUTE(A1;"_";"\";2)
Хитрость здесь в необязательном аргументе [instance]
. Мы устанавливаем его на 2, чтобы заменить второе вхождение символа подчеркивания.
=SEARCH("\";SUBSTITUTE(A1;"_";"\";2))-1)
С помощью этой формулы мы находим позицию фиктивного символа \
. Собирая все вместе, получаем формулу выше.
решение2
Я понимаю ваш вопрос как желание узнать для каждой строки в столбце B, встречается ли ее префикс где-нибудь в столбце A. Так что этот ответ решает эту проблему.
Я не смог уместить это в одну строку (потому что это должно искать везде в столбце A). Но для этого требуется только один дополнительный столбец.
Во-первых, формула для извлечения префикса из любой строки:
=LEFT(Column_A, FIND(Delimiter, Column_A, 1 + FIND(Delimiter, Column_A)) - 1)
Delimiter
это символ "_"- Внутренний
FIND()
вызов находит местоположение первого подчеркивания. Затем он использует его как отправную точку дляFIND
местоположения второго подчеркивания. - Функция
LEFT()
возвращает ряд символов, начиная с левой части строки. Поэтому мы вычитаем1
из местоположения второго подчеркивания и получаем префикс строки.
Итак, вы используете это, чтобы получить список всех префиксов столбца A. Затем вы используете формулу массива, чтобы проверить, присутствует ли каждый префикс в столбце B в списке префиксов столбца A.
{=OR(LEFT(Column_B, FIND(Delimiter, Column_B, 1 + FIND(Delimiter, Column_B)) - 1)=Prefix_A)}
Prefix_A
— это полный список префиксов столбца А.- Это та же формула для извлечения префиксов, которая была применена к столбцу A.
- Это должна быть формула массива, поскольку оператор внутри функции
OR()
возвращает массивTRUE
значенийFALSE
Вот скриншот таблицы, которую я создал для ответа на этот вопрос:
Для создания этих примеров формул я использовал FormulaChop (полное раскрытие информации: я написал FormulaChop).Здесьснимок экрана вывода FormulaChop для первой формулы.Здесьэто ссылка на электронную таблицу, которую я создал для ответа на этот вопрос.