Como mesclar várias colunas no Excel para que valores exclusivos sejam retidos na nova coluna?

3

Diga que os dados estão em Col1 e Col2 abaixo. Como podemos criar Col3 fundindo Col1 e Col2?

Col1  Col2   Col3
------------------
  a      b      a
  b      c      b
  c      d      c
  g      e      d
         f      e
                f
                g
    
por Amirul Islam 25.01.2016 / 04:46

4 respostas

1

Este VBA deve fazer isso. Tenho certeza de que existe uma fórmula, mas acho muito mais fácil ler o VBA nessas situações

Sub FindUniques()
'Define and set variables
Dim rangeIn As Range, rangeOut As Range
Set rangeIn = Application.Selection
Set rangeIn = Application.InputBox("Input Range", "Input Range", rangeIn.Address, Type:=8)
Set rangeOut = Application.InputBox("Select the first cell to output to", "Output Range Start", Type:=8)

Dim colLoop, rowLoop

Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")

Dim curVal


'Loop through range columns
For colLoop = 1 To rangeIn.Columns.Count
    'Loop through range rows
    For rowLoop = 1 To rangeIn.Rows.Count
        'Get the value of cell in current column, current row
        curVal = rangeIn.Cells(rowLoop, colLoop).Value
        'Check if we've already added this to the dictionary. If we have, it's not unique, skip it
        If Not dic.Exists(curVal) And curVal <> "" Then
            'Write the value in place of our output
            rangeOut.Value = curVal
            'Add the value to our dictionary so it'll be skipped if it comes up again
            dic(curVal) = ""
            'Go to the next cell down ready to write the next one
            Set rangeOut = rangeOut.Offset(1, 0)
        End If
    Next
Next
End Sub
    
por 25.01.2016 / 05:39
1

Aqui está uma maneira de usar colunas ocultas que não exigem o VBA. Isso não classifica a coluna final, no entanto.

Depoisdeinseriressasfórmulas,vocêpodeocultarastrêscolunasnomeioclicandocomobotãodireitodomousenoscabeçalhoseselecionandoOcultar:

Eissovaideixarvocêcomisso:

AsfórmulasnasquatrocolunasapósCol1eCol2terãoquesercopiadasparapelomenosodobrodocomprimentomáximodeCol1eCol2.EusugiroescolherumnúmerograndeearbitrárioquevocêtenhacertezadequeoseunúmerodelinhasCol1eCol2nuncaexcederáe,emseguida,esquecê-lo.

IssopressupõequeseuCol1eCol2estãonascolunasAeBequealinhadecabeçalhoestáincluídaealinhadecabeçalhoestánalinha1.Vocêteráquemodificá-lasligeiramentesenenhumalinhadecabeçalhoestiverincluída.

Afórmuladacolunacombinada:

=OFFSET($A$2,FLOOR((ROW()-ROW($2:$2))/2,1),MOD(ROW()-ROW($2:$2),2))

Afórmuladacolunafiltrada:

=IF(C2=0,"", IF(ISERROR(MATCH(C2, C$1:C1, 0)), ROW(), ""))

A fórmula da coluna classificada:

=SMALL(D:D, ROW() - ROW($1:$1))

A fórmula da coluna Col3:

=IFERROR(INDEX(C:C, E2), "")

A maneira como isso funciona é primeiro combinar Col1 e Col2 começando na primeira linha e prosseguindo para baixo (célula A2, célula B2, célula A3, célula B3, etc.). Ele faz isso usando uma combinação da OFFSET combinada com o FLOOR , MOD e ROW funções.

Em seguida, filtramos os duplicados testando se o valor existe na linha atual em todas as linhas anteriores. Usamos a função MATCH para isso em combinação com algum uso inteligente de referências absolutas e relativas. O número da linha é retornado em vez do valor para que possa ser usado nas próximas duas colunas.

Em seguida, trazemos todos os números de linha listados para o topo por uma combinação do SMALL e ROW funções.

E, finalmente, precisamos apenas retornar INDEX da coluna Combinada correspondente à linha da coluna Ordenado.

    
por 26.01.2016 / 00:28
1

Faça isso em uma cópia do seu arquivo, apenas no caso de algo explodir ou derreter, porque "Desfazer" nem sempre funciona. Copie os dados das duas colunas, sequencialmente, para outra coluna de rascunho; vamos chamá-lo V. Se os dados existentes tiverem cabeçalhos, copie o cabeçalho da coluna A; caso contrário, coloque algum valor fictício na célula V1.

CliqueemalgumlugarnacolunaV.Agoraváparaaguia"Dados", "Classificar & Filtro ", e clique em" Avançado ":

Issoabriráacaixadediálogo"Filtro avançado":

Verifiquese"Intervalo de lista" mostra seus dados na coluna V. Selecione "Copiar para outro local" e "Apenas registros exclusivos". Digite “W1” no campo “Copiar para” - ou clique no campo e, em seguida, clique em W1 (existem várias técnicas que obterão o mesmo resultado). Clique em "OK". Você deve ter algo assim:

AgoracopieosdadosdacolunaWparaacolunaC.Sedesejar,ordene.Emseguida,limpeascolunasVeW.

Divulgação:arespostaacimafoiparcialmentecopiadade minha resposta para Como agrupar colunas de dados por valores compartilhados .

    
por 26.01.2016 / 03:22
0

Solução VBA

Sub MergeColumnsUnique()    
  Dim MyLookupCols As Variant: MyLookupCols = Array(1, 2)
  Dim MyOutputCol As Integer: MyOutputCol = 3
  Dim MySheet As Variant: Set MySheet = ThisWorkbook.Sheets(1)

  For Each col In MyLookupCols
    curCol = MySheet.UsedRange.Columns(col)

    For Each cell In curCol
      If Not IsEmpty(cell) And MySheet.Columns(MyOutputCol).Find(cell) Is Nothing Then
        Count = Count + 1
        MySheet.Cells(Count, MyOutputCol) = cell
      End If
    Next cell

  Next col        
End Sub

    
por 25.01.2016 / 05:46