3

Существует ли программный, надеюсь, не макро-способ обратного отслеживания набора пронумерованных элементов?

Пример:

альтернативный текст

Первые два столбца - это те, в которые вводятся данные. Вы можете видеть, что пункт А имеет отношения с пунктами 1, 2 и 3. В крайнем правом столбце элементы 1, 2 и 3 все прослеживаются до элемента А.

Если для этого абсолютно необходим собственный макрос, можете ли вы дать несколько советов о том, как предварительно обработать его встроенными функциями, чтобы упростить написание макроса?

2 ответа2

1

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

Эта вещь, кажется, работает без какой-либо предварительной обработки. Вы бы использовали его как таковой:

В ячейке рядом с 1 формула будет

=ReverseTrace(A10,$B$1:$B$7,-1)

Предполагая, что:

  • A10 - это местоположение "1" (значение, которое вы ищите)
  • $ B $ 1:$ B $ 7 - это местоположение вашего списка товаров (от 1, 2, 3 до 2, 4)
  • -1 - смещение от столбца этого списка $ B $ 1:$ B $ 7, который вы хотите запросить

Следовательно, рядом с 2 будет = ReverseTrace(A11, $ B $ 1:$ B $ 7, -1)

Function ReverseTrace(varValue As Variant, lookupRange As Range, intTraceOffset As Integer)

Dim rngCell As Range

    For Each rngCell In lookupRange
        If InStr(1, CStr(rngCell.value), CStr(varValue)) > 0 Then

            If Len(ReverseTrace) > 0 Then
                ReverseTrace = ReverseTrace & ", " & rngCell.Offset(0, intTraceOffset)
            Else
                ReverseTrace = rngCell.Offset(0, intTraceOffset)
            End If

        End If
    Next

End Function
0

У меня была проблема с использованием формул массива, но без особого успеха.

Я почти достиг цели, поэтому решил опубликовать свои (нехватки) результаты до сих пор, на случай, если кто-то еще может конкретизировать последний шаг, который я пропускаю.

Вот что у меня так далеко. Это почти работает, но так как IF , кажется, не возвращает массив, только первый элемент, вы получаете только первую категорию ("A") вместо набора. Я не уверен, что это можно исправить, у кого-нибудь еще есть идеи?

CONCATENATE( IF( NOT( ISERROR( SEARCH(D1,$B$1:$B$7) ) ), $A$1:$A$7 , "" ) )

Диапазоны в массиве:

  • $B$1:$B$7 - вы ищете значения («1,2,3» и т.д.)
  • $A$1:$A$7 - это категории ("A", "B" и т.д.)
  • D1 - это значение, которое вы исследуете

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