Estou tentando mesclar dois intervalos de derramamento de tamanhos iguais para que a primeira coluna do intervalo de derramamento A fique ao lado da primeira coluna do intervalo de derramamento B.
Estou perto de uma resposta, mas ao mesmo tempo tenho a sensação de que estou fazendo isso de maneira completamente errada.
Como exemplo:
Em A1
digite a fórmula =SEQUENCE(3,2,1)
.
Em A5
digite a fórmula=CHAR(SEQUENCE(3,2,65))
Isso fornecerá os dois intervalos abaixo. O resultado que procuro está nas linhas 9:11.
Meus pensamentos foram fazer isso com FILTERXML
.
Isso une os dois intervalos e começa a construir a string xml (inserida em cell F1
):
=LET(ColumnNum,COLUMN(A1#),
FirstTable, A1#,
SecondTable, A5#,
PrefixA, "<a" & ColumnNum & ">",
SuffixA, "</a" & ColumnNum & ">",
PrefixB, "<b" & ColumnNum & ">",
SuffixB, "</b" & ColumnNum & ">",
xml, PrefixA & FirstTable & SuffixA &
PrefixB & SecondTable & SuffixB,
xml)
Isso finaliza o xml e retorna o intervalo final derramado.
=LET(StartCol,COLUMN(F1),
xml,F1#,
LastCol,StartCol+COLUMNS(xml)-1,
finalxml,"<y>" & TEXTJOIN("",FALSE,IF(COLUMN(xml)=StartCol,"<x>","") & xml & IF(COLUMN(xml)=LastCol,"</x>","")) & "</y>",
CHOOSE(SEQUENCE(,COLUMNS(xml)*2,1),
FILTERXML(finalxml,"//x/a1"),
FILTERXML(finalxml,"//x/b1"),
FILTERXML(finalxml,"//x/a2"),
FILTERXML(finalxml,"//x/b2")))
Isso funciona bem para dois intervalos de duas colunas, mas o número de colunas será alterado para que a CHOOSE
instrução precise ser atualizada manualmente a cada vez.
Existe uma maneira de fazer isso funcionar? Feliz em tomar LAMBDA
soluções, mas com medo de não poder usar as TEXTSPLIT
funções do novo tipo.
Em A9 coloque
e em B9 coloque
Agora copie A9:B9 para C9:D9.
Se você tiver mais de duas colunas para intercalar, continue copiando a partir de E9 em intervalos de múltiplos de duas colunas.
Além disso, se você tiver três ou mais intervalos de "fonte", apenas estenda a fórmula para o terceiro ou quarto intervalo e altere o "/2" para "/3" ou "/4" ou quantos mais intervalos você está trabalhando.
EDIT: Não consegui pensar em uma maneira de analisar isso a partir de uma única fórmula de intervalo dinâmico no início. Infelizmente, o Excel não permite a junção de matrizes usando a sintaxe de matriz estática, por exemplo, {A1#, A5#} não é permitido. No entanto, a recente adição de MAKEARRAY e LAMBDA apresenta uma solução interessante:
Solução de fórmula única!
Infelizmente você não pode usar intervalos dentro da função lambda por algum motivo (um bug, eu acho). Tão mais fácil é definir seus intervalos duas vezes - um na instrução LET e uma vez como parte do INDEX.
Aqui está uma fórmula mais fácil de escalar em comparação com a sua atual:
=LET(t_count, 3, tables, (A1#,A5#,A9#), row_count, ROWS(INDEX(tables,0,0,1)), col_count, COLUMNS(INDEX(tables, 0, 0, 1)) * t_count, s, SEQUENCE(row_count, col_count, 0), INDEX(tables, INT(s / col_count) + 1, INT(MOD(s, col_count) / t_count) + 1, MOD(s, t_count) + 1))
Ou a mesma fórmula dividida para uma melhor visão geral:
Para modificar a fórmula, você só precisa atualizar
t_count
e listar todos os seus intervalos paratables
.