У меня есть лист, который выглядит так:
Я хочу (автоматически) создать матрицу, которая выглядит следующим образом:
Каков наилучший способ достичь этого?
Это легко сделать с помощью формул.
Для простоты я поместил матрицу в столбцы C
- N
(и далее) основной рабочей таблицы; переместить его на другой лист (страницу / вкладку) тривиально.
Это работа для функции SEARCH
, которая ищет одну строку в другой, как "анти" в "безумном".
Мы будем использовать его для поиска каждого отдельного свойства ("анальгетик", "антибактериальный" и т.д.) В списке свойств («антисептический, противогрибковый, анальгетический, противоопухолевый и т.д.»).
SEARCH
возвращает позицию подстроки - например, SEARCH("anti", "frantic")
возвращает 3, потому что "а" является третьим символом "безумного".
Нас это не волнует; нас интересует тот факт, что, если первая строка присутствует во второй, SEARCH
возвращает число, а в противном случае возвращает ошибку.
Итак, если мы поместим ISERROR(SEARCH(C$1, $B2))
в ячейку C2
, он вернет FALSE, если "антисептик" (C1
) находится в списке свойств для лаванды (B2
), и TRUE в противном случае.
Так
=IF(ISERROR(SEARCH(C$1, $B2)), "", "x")
отображает x
если свойство находится в списке, и пустое, если его нет.
Но это упрощение. Если список свойств включает «антибактериальный (мощный)», то поиск «антибактериальный» будет успешным. Ваша иллюстрация желаемой матрицы предполагает, что вы не хотите, чтобы это произошло. Для этого есть стандартная хитрость: поиск «, антибактериальный» (с запятыми в начале и в конце), чтобы найти «антибактериальный» в качестве полной записи в списке. Но это не будет совпадать, если «антибактериальный» является первой или последней записью в списке - поэтому мы добавляем запятые в начале и в конце списка.
Итак, поместите =IF(ISERROR(SEARCH(", "&C$1&",", ", "&$B2&",")), "", "x")
в ячейку C2
и перетащите вниз и вправо :