Eu tenho uma coluna (chamá-lo de A) no Excel lista off diferentes itens e suas propriedades. Cada item tem a palavra "Tipo" associada a ele e, portanto, há uma célula com esse rótulo na coluna A, de modo que, na coluna ao lado dele (B), o tipo possa ser listado. Alguns (não todos) itens também têm um rótulo "Widget" associado a eles.
Como cada item tem apenas um rótulo "Tipo", eu gostaria de poder fazer uma pesquisa no Excel pelo rótulo "Tipo" e, em seguida, verificar se há um rótulo "Widget" ANTES do próximo rótulo "Tipo" e se há é colar o valor na coluna B adjacente ao rótulo "Tipo" em outra planilha. Ele continuaria fazendo isso até que não mais ocorrências da palavra "Tipo" fossem encontradas. Isso é algo viável para implementar? Para tornar o layout mais claro, uma coluna de amostra está abaixo. Observe que o número de espaços entre cada entrada, infelizmente, não é consistente e, portanto, não pode ser usado como uma maneira de rastrear onde está. Da mesma forma, a palavra Widget não precisa estar diretamente acima de Tipo, ela pode aparecer em qualquer lugar entre as duas instâncias de "Tipo" que a sustentam.
**Type** 01
Width .5
Length .4
Height .3
Weight 15
Widget Blue
**Type** 072
Width .1
Length .1
Height .1
Weight 50
**Type** 025
Width .4
Length .4
Widget Red
Weight 11
Height .4
A saída desejada na folha separada seria então simplesmente:
01
025
já que esses são os tipos que possuem um widget associado.
fonte
**Type**
literalmente repetido várias vezes como um delimitador de categoria ou tem esse rótulo foi homogeneizado a partir de diferentes tipos nos dados reais? Se este último, o que distingue unicamente cada tipo das outras entradas?**text**
é Markdown paratext
não é? Você pode ter**Type**
com backticks, ou ** Tipo **, digitando uma barra invertida antes de cada*
.**Type**
01 Azul em três colunas contíguas?Respostas:
Fórmula atualizada. Encontra a célula com o primeiro tipo e segundo tipo e procura o widget de palavras entre elas. Se existir, retorne o valor ao lado do tipo, se não retornar em branco.
Entrado com ctrl + shift + enter
A célula E1 teria o número 1, E2 teria o número 2. Copie a fórmula para baixo para retornar cada instância do WIDGET. Será erro se não houver mais, então você poderia usar um iferror em torno dele.
Provavelmente levaria um tempo para calcular (ou meu comp só é lento devido a fazer outras coisas agora). e você pode estar melhor usando uma macro.
Abaixo está uma tentativa muito rápida. Ele os lista de baixo para cima. Basicamente, ele passa da última linha para a primeira. Se encontrar widget, ele ativará uma bandeira. Se o sinalizador estiver aceso e encontrar um tipo, ele retornará a célula ao lado dele.
* Editei a macro para trabalhar com a localização do tipo ou widget na string e não apenas uma correspondência exata
Saída, células azuis devem ser listadas, células vermelhas são ignoradas porque não tem um widget. Células listadas na ordem inversa devido à direção do loop.
fonte
Você pode fazer isso com uma instrução IF AND como:
Isso basicamente diz ao Excel se o texto "Widget" estiver em uma célula acima de uma célula com o texto "** Tipo **", insira os dados da célula na coluna B ao lado de "** Tipo **", caso contrário, deixe em branco.
Você acaba com isso:
Se você deseja que os dados (072 neste exemplo) apareçam em outra planilha, sua fórmula precisa se referir às células em sua planilha específica. Supondo que você tenha os dados em uma planilha chamada "Folha 1", use esta fórmula na planilha onde deseja que os dados apareçam:
fonte
Aqui está minha opinião sobre seus dados e requisitos de amostra. Observe que eu expandi seus dados de amostra para demonstrar como vários cenários são tratados.
As fórmulas padrão em D2: G2 são,
D2 é = IF (COUNTIF (A: A, "Widget") & gt; COUNTIF (D $ 1: D1, "Widget"), "Widget", "") `
E2 é
=IF(LEN($D2),INDEX($B$1:$B$9999,SMALL(INDEX(ROW($1:$9999)+($A$1:$A$9999<>"widget")*1E+99,,),ROW(1:1))),"")
F2 é
=IF(LEN($D2),INDEX($B$1:$B$9999,SMALL(INDEX(ROW($1:$9999)+($A$1:$A$9999<>"**Type**")*1E+99,,),COUNTIF(INDIRECT("A1:A"&SMALL(INDEX(ROW($1:$9999)+($A$1:$A$9999<>"widget")*1E+99,,),ROW(1:1))),"**Type**"))),"")
G2 é
=IF(LEN($D2),VLOOKUP("**Type**", INDIRECT("A"&SMALL(INDEX(ROW($1:$9999)+($A$1:$A$9999<>"widget")*1E+99,,),ROW(1:1))&":B9999"), 2, FALSE),"")
Reduzi os intervalos de células referenciados das referências de colunas completas para minimizar o atraso de cálculo. Ambos
INDIRECT
eINDEX
(em sua forma de array aqui) são considerados volátil funções que recalculam sempre que ocorre um ciclo de cálculo; não apenas quando um valor muda que os afeta diretamente. Preencha conforme necessário.Eu disponibilizei essa pasta de trabalho de amostra para você no meu OneDrive Aqui para referência e download.
Widget_types.xlsx
Isso provavelmente vai mantê-lo ocupado por um pouco durante a transcrição das fórmulas para seus próprios propósitos. Poste de volta com qualquer específico perguntas que você tem se você tiver um problema.
fonte