Поиск в Excel с несколькими строковыми критериями - PullRequest
2 голосов
/ 13 июня 2011

Я бы хотел найти в ячейке описания ЛЮБЫЕ слова (критерии) из предварительно определенного списка и вытащить соответствующую сумму в долларах для элемента из соседней ячейки.

Для иллюстрации приведу мои настройки:

   A   |   B   |   C   |     D    |    E    |   F    |

 Date  | Descr.| Amount|   Cat1   |   Cat2  |  Cat3  |

D, E, F: Каждый из них является категорией предмета.Если элемент в этой строке принадлежит категории, я бы хотел, чтобы его количество заполняло эту ячейку категории в той же строке.Каждая ячейка категории имеет формулу для проверки этого и выполнения операции.

Моей первой мыслью было использование VLookup, но у меня есть список значений поиска.Я не смог успешно сделать это.Каждая из ячеек категории имеет следующую формулу:>

=IF(SUM(COUNTIF($B10,{"*costco*","*saputo*","*t & t*"}))>0,$C10," ")

Столбец B относится к описанию, в котором ищется любой из критериев.Если какое-либо из слов содержится в описании, ячейка заполняется суммой из столбца C, в противном случае она остается с пробелом.

Это отлично работает как есть, однако мне нужны критерии (costco, saputo, t & t в этом случае) быть гибким (добавлять или удалять строки в списке), а не жестко закодированным в формуле.Это моя проблема: формула перестает работать, если я заменяю критерии ссылкой на другую ячейку.Я относительно новичок в превосходстве и не знаком с ограничениями / ограничениями его функций, что, я подозреваю, является проблемой.

Любая помощь очень ценится, дайте мне знать, если мне нужно предоставить больше информации.

Анкит

Ответы [ 2 ]

2 голосов
/ 13 июня 2011

Создать имя (например, именованный диапазон, но относится к значению, а не к диапазону.)

Для Excel 2007 и 2010 на вкладке "Формулы", группа "Определенные имена", диспетчер имен
Для Excel 2003 Вставка, Имена, Определить

Создайте новое имя (давайте используем имя «Ключевые слова»), установите для него значение «Относится к»

={"*costco*","*saputo*","*t & t*"}

Формула затем становится РЕДАКТИРОВАТЬ введите в виде формулы массива

=IF(SUM(COUNTIF($B10,KeyWords))>0,$C10," ")

Редактирование списка затем становится редактированием, значение KeyWords относится к значению. Это можно сделать через менеджер имен или, если хотите, через VBA

EDIT

Образец VBA

Sub SetKeyWords()
    Dim wb As Workbook
    Dim nm As Name

    Set wb = ActiveWorkbook
    Set nm = wb.Names("KeyWords")
    nm.RefersTo = "={""NewString""}"

End Sub
1 голос
/ 13 июня 2011

Загрузка искомых строк в массив (путем преобразования диапазона в массив или с помощью выбора пользователем строк из небольшой формы, которую вы разрабатываете)

 Sub MyLookup(arrCategories() As Variant)
    Dim searchrange As Range
    Dim xCell As Range
    Dim count As Integer
    'set searchrange to the proper column
    For Each xCell In searchrange
       For Each catg In arrCategories
          If xCell = catg Then
              'Do something here
          End If
       Next catg
    Next xCell       
 End Sub

Возможно, вам придется настроить массив строк в зависимости от того, имеет ли значение регистр. В зависимости от размера вашего набора данных, может быть лучше преобразовать searchrange в массив.

Может быть более быстрый способ узнать, найдены ли определенные строки в заданном диапазоне, но это общая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...