Это приложение, чтобы перечислить, какие стойки предмет будет находиться на складе.

Например, если предмет хранился на нескольких разных стойках. Мне не нужно общее количество повторений элемента, просто заголовок столбца в этом случае «Rack #», где его можно найти.

Я создал простой пример и мне нужен код для B2.

Я только что ввел значение B2, чтобы показать результат, который я ищу:

2 ответа2

0

Хитрое решение без использования VBA

  • Вставить ="" в G2:G6.
  • Вставить =IF(NOT(ISNA(MATCH($A2,D$2:D$5,0))),CONCATENATE(G2,IF(G2="","",", "),D$1),G2) в H2 и скопируйте его в H2:J6
  • Вставьте =J2 в B2 и скопируйте его в B2:B6

Решение вопросов

Если вы добавляете стойки, вам нужно добавить столбцы справа от столбца J.

Больше стоек и больше контента в стойках

Если бы в Excel была хорошая функция конкатенации строк, ее можно было бы сократить ....

объяснение

Нам нужно поместить ="" в столбец G, потому что я хотел, чтобы в столбцах H - J был один и тот же код и не было дополнительных предложений if.

Длинная команда объяснила:

  • В какой строке находится A2 в столбце D2:D5 (если нет, то #NA) => MATCH (A2, D2:D5,0)
  • Не находится ли A2 в столбце D2:D5 => ISNA (МАТЧ (A2, D2:D5,0))
  • Инвертировать «А2 отсутствует в столбце D2:D5» => НЕ (ISNA (MATCH (A2, D2:D5,0)))
  • Если вышеперечисленное случается, тогда ДЕЛАЙТЕ ЭТО еще, ЧТО => ЕСЛИ (НЕ (ISNA (МАТЧ (A2, D2:D5,0))), ЭТО, ТО)
  • ЭТО (A2 находится в столбце = мы хотим записать "Стойку 1") => CONCATENATE (G2, IF (G2 = "", "", ","), D1)
  • ЭТО (у нас нет ничего нового) => G2
-1

Вот оно, используя VBA / Macros:

Public Function racks(code As String, range As range) As String
    result = ""
    Separator = ","
    colRanges = range.Columns.Count
    rowRanges = range.Rows.Count
    For i = 1 To colRanges
        For j = 2 To rowRanges
            If code = range.Cells(j, i) Then
                If result <> "" Then
                    result = result & Separator & range.Cells(1, i)
                Else
                    result = range.Cells(1, i)
                End If
                j = rowRanges
            End If
        Next j
    Next i
    racks = result
End Function

Откройте VBA/Macros с помощью Alt+F11, вставьте новый модуль в ThisWorkbook и вставьте этот код с правой стороны.

Функция использует два параметра, код и диапазон, в котором она будет выполнять поиск.

Например, для ячейки B2 в вашем примере это будет =racks(A2,$D$1:$F$5) .

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