Recentemente me perguntaram se era possível destornar uma tabela de dados no Excel sem usar nenhum dos recursos mais "avançados" como PowerQuery, VBA ou TypeScript.
relate perguntas
-
Como posso retornar linhas específicas onde EXISTE uma taxa no contrato listado, mas NÃO há taxa no sistema?
-
adicionar automaticamente um campo de referência em uma tabela quando alguns valores são repetidos?
-
percorrer a coluna com a alteração do endereço da célula
-
Pesquise uma string e os valores de saída correspondentes a essa string
-
Existe uma maneira no Excel de contar as ocorrências de um texto específico em uma string, mas também incluir o caractere anterior?
O
TEXTSPLIT(TEXTJOIN())
método funcionará bem para tabelas menores, onde a sequência resultante não excederá 32.767 caracteres.Uma abordagem alternativa para tabelas de qualquer tamanho é usar técnicas de manipulação de array baseadas
HSTACK
emTOCOL
-, que variam dependendo da complexidade da tabela.Exemplo 1: um campo de rótulo de linha única para manter
Exemplo 2: vários campos de rótulo de linha para manter
Exemplo 3: vários campos de valor para unpivot
Estes são apenas 3 exemplos básicos. No entanto, modificações podem ser feitas para lidar com praticamente qualquer cenário.
No passado, eu fiz isso com algumas
INDEX/MATCH
soluções bastante complicadas, mas para minha surpresa (não usei muito o Excel nos últimos anos), o Excel 365 tornou isso muito fácil de fazer.A solução geral é muito simples e legível (especialmente ao usar tabelas e intervalos nomeados). Por exemplo, para uma tabela básica como:
A fórmula é bastante simples e fácil de seguir:
O que realmente me impressionou foi o quão útil é a nova
LET
função para mim. Por exemplo, ao desdinamizar uma tabela com uma entrada um pouco diferente (com espaços em branco) e uma saída desejada ligeiramente diferente, o usoLET
torna a fórmula muito mais fácil de seguir:Não encontrei muitos exemplos on-line de tais fórmulas não dinâmicas, então espero que alguém também as considere úteis.
Aqui está uma maneira de fazer o unpivoting usando Fórmulas Dinâmicas do Excel aplicáveis a
MS365
• Método 1 O método descrito é dinâmico , explode com mudança na expansão de linhas e colunas:
• Fórmula usada na célulaA23
NOTA: A fórmula acima pode ser simplesmente encurtada usando o mesmo algoritmo, mas não será dinâmica , ou seja, ela se expande quando as linhas são adicionadas, mas não se expande quando as colunas são aumentadas, pode-se tentar, o acima irá expandir ou recolher imediatamente, se há uma mudança na fonte real. A forma alternativa, descrita abaixo
• Método 2 :
Opção de variante 1 : Outra maneira de escrever o primeiro método usando um customizado
LAMBDA()
para execução para cada um, onde oTOCOL()
&IFS()
não é usado repetidamente, isso é dinâmico :Opção de variante 2 : Se você deseja aplicar o mesmo algoritmo com o segundo método, pode tentar desta forma também, isso não é dinâmico :
Para o segundo exemplo de DataSet, você pode tentar o seguinte:
NOTE: Using
TEXTJOIN()
function when unpivoting data, I don't think is a rock-solid method, because the said function itself has some limitations, yes one can say every functions has their limitations, but all depends on the data one has. Still, I won't be usingTEXTJOIN()
function orARRAYTOTEXT()
orCONCAT()
as perMSFT
documentations --> If the resulting string exceeds 32767 characters (cell limit),TEXTJOIN()
returns the #VALUE! error, clearly, it is bit risky to use. See the cell limit mentioned here, works with the whole array concept as it is taken into one, it will certainly return an error, as the array formula seats in one cell and se espalha por várias linhas/colunas.