Reverse-tracing uma lista de itens numerados

3

Existe uma maneira programática, esperançosamente não macro para rastrear um conjunto de itens numerados?

Exemplo:

As duas primeiras colunas são aquelas em que os dados são inseridos. Você pode ver que o item A tem um relacionamento com os itens 1, 2 e 3. Na coluna mais à direita, os itens 1, 2 e 3 são rastreados. de volta ao item A.

Se isso exigir absolutamente uma macro personalizada, você pode fornecer algumas sugestões sobre como pré-processá-lo com funções internas para facilitar a gravação da macro?

    
por Adam S 29.07.2010 / 18:10

2 respostas

1

Eu não acredito que haja uma maneira de fazer o tipo de pesquisa que você está procurando sem uma macro. Eu posso estar errado, mas se não estou, aqui está uma função personalizada para você.

Essa coisa parece funcionar sem nenhum pré-processamento. Você iria usá-lo como tal:

Na célula ao lado de 1, a fórmula seria

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

Assumindo:

  • A10 é a localização de "1" (o valor que você está pesquisando)
  • $ B $ 1: $ B $ 7 é o local da sua lista de itens (1, 2, 3 até 2, 4)
  • -1 é o deslocamento da coluna desta lista de $ B $ 1: $ B $ 7 que você deseja consultar

Próximo a 2, seria, portanto, = 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
    
por 29.07.2010 / 19:50
0

Eu tive um crack neste usando fórmulas de matriz, sem muito sucesso.

Eu quase cheguei lá, então decidi postar meus (falta de) resultados até o momento, no caso de alguém mais poder dar o passo final que está faltando.

Aqui está o que eu tenho até agora. Quase funciona, mas como o IF não parece retornar um array, apenas o primeiro item, você acaba apenas com a primeira categoria ("A") em vez do conjunto. Não tenho certeza se é possível consertar isso, alguém mais tem alguma idéia?

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

intervalos na matriz:

  • $B$1:$B$7 você está procurando vals ("1,2,3" etc)
  • $A$1:$A$7 são as categorias ("A", "B", etc)
  • D1 é o valor que você está investigando
por 02.08.2010 / 17:15