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

   __A__     __B__       __C__         
1   Item #   Warehouse   Description
2  ABCD-0001  WHSE 1      Red Label
3  ABCD-0001  WHSE 3      Red Label
4  QRST-0005  WHSE 2      2" Pipe
5  QRST-0005  WHSE 1      2" Pipe
6  LMNO-0002  WHSE 4      6" Pipe
7  LMNO-0002  WHSE 2      6" Pipe

И я хочу, чтобы моя формула поиска перечисляла мои результаты как таковые:

    __A__       __B__              __C__ 
1    ITEM      WAREHOUSE          Description
2  ABCD-0001   WHSE 1, WHSE 3      RED LABEL
3  QRST-0005   WHSE 2, WHSE 1      2" Pipe
4  LMNO-0002   WHSE 4, WHSE 2      6" Pipe

Все функции, которые я видел (INDEX-MATCH, VLOOKUP), могут отображать результаты только по вертикали в разных ячейках. Я хотел бы перечислить склады в одной камере, разделенные запятой.

Я попытался создать пользовательскую функцию в VBA, которую я видел в другом посте на этом сайте. Тем не менее, я продолжал получать ошибку #VALUE. Я считаю, что это связано с надписью в моем примере, где тот, который я видел, содержал только цифры.

Любые и все предложения будут оценены.

Функция, которую я использовал изначально, была найдена у пользователя BryanC. Это выглядело так:

   Public Function mylookup(inputrange As Range, match As Range) As String
   Dim arr() As Variant
   Dim d As Object
   Dim result As String
   Dim i As Integer
   Dim v As Variant
   Set d = CreateObject("Scripting.Dictionary")
   arr() = inputrange.Value

   For i = 1 To UBound(arr)
       If arr(i, 1) = match Then
           d(arr(i, 2)) = 1
       End If
  Next i
  For Each v In d.Keys()
          result = result & v & ","
  Next v
      result = Left(result, Len(result) - 1)

  mylookup = result

  End Function 

Вполне возможно, что у меня правильно написана функция на VBA, а затем я неправильно выполняю формулу. Для этого пользователь предложил = mylookup(A1:A7, B2)

2 ответа2

0

Ваш mylookup в порядке, вы должны использовать его как =mylookup(A1:B7,B2) .

inputrange должен охватывать столбцы A и B. Вы пытаетесь только с колонкой А.

0

Вот простой, хотя и не элегантный, способ сделать это. Используйте следующий столбец для построения списков складов:

Формула в ячейке D2:

=IF(A2=A1,D1&", "&B2,B2)

Скопируйте это вниз по столбцу по мере необходимости. Он проверяет, совпадает ли Item # с предыдущей записью. Если это так, он объединяет склад со списком. В противном случае он начинает новый список.

Используйте следующий столбец, чтобы создать фильтр, который идентифицирует последнюю запись для каждого номера элемента:

Формула в ячейке E2:

=IF(A2=A3,"",1)

Скопируйте это вниз по столбцу. Это смотрит на то, соответствует ли текущий Item # следующему. Если это так, ячейка остается пустой. Если он не совпадает, это означает, что он является последней записью для Item # и имеет полный список хранилищ в столбце D, поэтому фильтр получает 1 .

Теперь вы фильтруете на E, чтобы показать только записи, содержащие полный список. Оттуда у вас есть основа для создания желаемого результата путем копирования, ссылки на ячейки или просмотра на месте. Чтобы просмотреть на месте, переместите столбец D влево и скройте столбец B. Вот результат после того, как также скрылся столбец E:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .