Isso pode ser um problema trivial, mas não consigo descobrir. Eu tenho um conjunto de dados que possui colunas duplicadas e preciso descobrir uma maneira de empilhar cada n-ésima coluna uma abaixo da outra. Então, se considerarmos isso:
Podemos ver que temos colunas duplicadas, preciso que meus dados sejam empilhados um embaixo do outro assim:
Minhas colunas duplicadas são uma constante, então sempre terei 5 colunas duplicadas. Qualquer ajuda neste assunto seria altamente apreciada!
OFFSET
Você precisa de uma fórmula cíclica aqui.CONFIGURAR
Portanto, temos uma linha de cabeçalho e dados, digamos,
A2:ZZZZ38
. Vamos apenas colocar issoSheet1
. Vamos configurar nossa saída emSheet2
.PRECIS
Conceitualmente, podemos entender facilmente que queremos
Sheet2!A2
(doravante chamaremos esta célula apenasA2
para simplificar) reproduzirSheet1!A2
. EmA3
queremos a próxima célula abaixo, e assim por diante - até que tenhamos examinado todos os registros emSheet1!A
, e então queremos voltar para a primeira linha, mas em 5 colunas.Este é claramente um caso para
OFFSET
.FÓRMULA
=OFFSET(Sheet1!A$2,MOD(ROW()-2,COUNTA(Sheet1!A:A)-1),ROUNDDOWN((ROW()-2)/(COUNTA(Sheet1!A:A)-1),0)*5)
DEMO
Meus dados são um pouco menores que os seus; apenas grande o suficiente para provar o conceito.
Aqui está
Sheet1
:E a saída
Sheet2
:EXPLICAÇÃO
OFFSET
tem três partes. Onde começar, quantas linhas descer (deslocamento vertical) e quantas colunas ultrapassar (deslocamento horizontal).A- por onde começar
Sheet1!A$2
Bem direto.
B - deslocamento de linhas
MOD(ROW()-2,COUNTA(Sheet1!A:A)-1)
Descubra em que linha estamos e subtraia 2 (estamos começando em
A2
, e queremosA2
ser o deslocamento zero). Divida isso por quantos registros estamos contando (o-1
aqui representa a exibição da linha de cabeçalho) e pegue o restante. Isso simplesmente produz uma função que conta de0
até[n-1]
onde n é o número de linhas e começa novamente em 0.Em outras palavras, para uma tabela com 8 registros, isso retorna:
0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0 ...
C - deslocamento de colunas
ROUNDDOWN((ROW()-2)/(COUNTA(Sheet1!A:A)-1),0)*5
Pegue
ROW()-2
novamente e divida pela contagem de registros novamente - mas desta vez, em vez de pegar oMOD
(restante) desse relacionamento, queremos apenas arredondá-lo para o inteiro mais próximo. Isso nos dá uma sequência que consiste em um número de 0 igual à contagem de registros, seguido por um número de 1, 2, etc. Em seguida, multiplique por 5 (consulte a observação abaixo). Isso fornece nosso deslocamento de coluna - toda vez que a contagem cíclica de linhas é redefinida, saltamos outras 5 colunas.Em outras palavras, para uma tabela com 8 registros, isso retorna:
0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 10 ...
FÓRMULA, NOVAMENTE:
=OFFSET(Sheet1!A$2,MOD(ROW()-2,COUNTA(Sheet1!A:A)-1),ROUNDDOWN((ROW()-2)/(COUNTA(Sheet1!A:A)-1),0)*5)
Isso entra
Sheet2!A2
e copia paraA:E
e para baixo sem restrição.NB
COUNTA
não acho que isso irá atrasá-lo. Em caso afirmativo, você pode alterar facilmente cada instância deCOUNTA(Sheet1!A:A)
paraCOUNTA(Sheet1!A2:A38)
, pois tecnicamente já sabemos o tamanho dos dados, ou simplesmente codificar esse valor para 37, o que funcionará desde que você tenha exatamente 37 linhas.OFFSET
existe e então elaborar a lógica/aritmética para entender como produzir a sequência de pares que você precisa compensar.