Como mesclar duas colunas do Excel em uma (a outra maneira)

6

Eu tenho uma lista como mostrada nas colunas A e B e quero mesclar conforme mostrado em D :

Como posso fazer isso?

Aqui, os alfabetos (a, b, c, d, e, f, g, h) são usados apenas como espaços reservados. O que eu realmente preciso em column D é A1, B1, A2, B2, A3, B3, A4, B4.

    
por claws 21.01.2013 / 06:44

7 respostas

8

Uma solução baseada em fórmula não tão simples de manter é usar a seguinte fórmula em D:

=INDEX($A$1:$B$5,QUOTIENT(ROW()+1,2),IF(MOD(ROW(),2)=0,2,1))

Deixe-me adicionar formatação e explique em partes:

=INDEX(
   $A$1:$B$5,
   QUOTIENT(ROW()+1,2),
   IF(MOD(ROW(),2)=0,2,1)
   )

Portanto, INDEX retornará a célula em um intervalo por coordenadas. Argumentos são:

  1. $A$1:$B$5 - intervalo, contendo duas colunas necessárias.
  2. QUOTIENT(ROW()+1,2) - divisão inteira de um número de linha atual por 2. Isso dá um número de linha no intervalo de (1).
  3. IF(MOD(ROW(),2)=0,2,1) - resto da divisão inteira de (2). Isso dá o número da coluna no intervalo de (1).

A solução não é realmente flexível e pequenas melhorias são necessárias para suportar:

  • Mais de duas colunas
  • Colunas não vizinhas
  • Resultado em um intervalo específico (por exemplo, inicie em D5)
por 21.01.2013 / 10:46
3

Se você não se importa em usar uma macro, aqui está uma ideia.

Sub MergeColumnsAlternating()
  Dim total, i, rowNum as Integer
  total = 4 '' whatever number of rows you need to merge.
  i = 1
  For rowNum = 1 to total
    Range("D" & i) = Range("A" & rowNum)
    i = i + 1
    Range("D" & i) = Range("B" & rowNum)
    i = i + 1
  Next rowNum
End Sub

Estou super enferrujada com o meu VBA (mal me lembro disso), não uso o escritório há muitos anos, mas queria contribuir de qualquer maneira.

    
por 21.01.2013 / 09:24
3

Com base na resposta excelente do local padrão (e em resposta à solicitação do AHC), você pode adicionar flexibilidade definindo algumas variáveis e ajustando a fórmula.

Vamos começar pelo resultado da localidade padrão.

Infelizmente,afórmulausadaaquiseráquebradasevocêtivermaisdeduascolunasouseasaídanãocomeçarnamesmalinhadointervalo.

Vamosdefiniralgumasvariáveisparaespecificaralinhanaqualvocêdesejaquesuasaídacomeceeonúmerodecolunasemseuintervalo.

A caixa cinza mostrada acima lista nossas variáveis. Para células G1, G2 & G3, nomeie o intervalo clicando em cada célula e, em seguida, clicando na caixa destacada em amarelo. Digite o nome do intervalo relevante: StartRow , NumOfCols e RangeIncHeaders .

Agora você pode substituir a fórmula original por nossa nova que usa variáveis:

=INDEX( $A$1:$B$4, ROUNDUP((ROW()-StartRow+1)/NumOfCols,0)+IF(RangeIncHeaders="Yes",1,0), MOD(ROW()-StartRow,NumOfCols)+1 )

Agoravamosinserirumaterceiracoluna.Altereointervalomencionadonafórmulapara$A$1:$C$4paracaptarofatodeexistirem3colunas.DefinaNumOfColspara3também.

Comoexemplo,vamostambémmovernossasaídaparabaixo,paraqueelacomecenalinha5emvezdalinha1.DefinaStartRowpara5.

Por fim, você pode querer ativar e desativar os cabeçalhos de linha. Se sim, apenas defina RangeIncHeaders para Yes .

    
por 25.03.2015 / 11:56
2

Subtotal para cada alteração na ColumnA, Filter e selecione as linhas do sub total (por exemplo, procurando por Count), anule essas células, remova o filtro, mova a ColumnB uma linha para baixo e concatene as duas colunas.

Mais detalhadamente:

O requisito de intercalação seria mais fácil de atender se todas as linhas alternativas estivessem em branco. Subtotal já tem a facilidade de adicionar linhas e pode ser usado para conseguir isso. Na pergunta, parece que cada célula é diferente, portanto, uma contagem em cada alteração deve criar um subtotal para cada entrada. [Se os dados tiverem uma repetição adjacente, uma coluna "auxiliar" pode ser usada (digamos, ColumnD aqui, uma vez que a coluna auxiliar é necessária apenas temporariamente). Diga a chave 1 em D1 e arraste o identificador de preenchimento até onde for necessário –row 4 em questão - com Ctrl pressionado.]

Subtotalling para cada mudança (ColumnA se possível, caso contrário ColumnD) insere subtotais, por exemplo:

Comafiltragem,aslinhascontendoossubtotaispodemserselecionadas(porexemplo,FiltrosdeTexto,Contém,chave"Contagem", OK) e em branco (as linhas são necessárias, mas não o seu conteúdo). Os rótulos das colunas podem ser excluídos ao mesmo tempo, se não forem necessários.

A imagem pequena do meio mostra que linhas vazias alternativas foram alcançadas, após o que os subtotais podem ser removidos e uma célula inserida no topo da coluna B com o deslocamento para baixo.

Os dados originais ainda estão intactos (embora agora espaçados) e as entradas ColumnD podem ser 'movido' das Colunas A e B por concatenação, como com a fórmula como na imagem à direita (copiada conforme necessário). Se os dados originais forem texto ou valores, as fórmulas em ColumnD poderão ser substituídas por Copy / Paste Special / Values.

Pode haver melhores formas de alcançar o resultado, mas é difícil dizer sem saber o que está nas colunas A e B (por exemplo, fórmulas [com ou sem referências relacionais?], texto ou valores?).

    
por 21.01.2013 / 07:19
1

A1 = a
B1 = b

O que eu entendo é que em D1 você precisa de uma saída como "ab", que é A1, B1. E então você precisa ter uma fórmula como =A1&B1 .

    
por 21.01.2013 / 08:38
1

Supondo que você tenha colunas como abaixo no Excel,

A1 B1
------- --------
 1 a
 2 b
 3 c

Em seguida, aplique a fórmula na coluna C1, =INDEX($A:$B,CEILING(ROWS(C$1:C1)/2,1),2-MOD(ROWS(C$1:C1),2)) . Você receberá o resultado desejado em c1.

    
por 22.03.2013 / 10:57
-1

= exclusivo (transpose ({transpose (unique (A: A)), transpõe (B: B))})) Isso deve servir ao propósito!

    
por 03.02.2018 / 10:47