Preencha as entradas ausentes de uma folha para outra

0

Eu tenho duas folhas no Excel. Para este exemplo, folha 1 e folha 2.

Folha 1 : 100 registros com Nome , Localização , Sexo

Folha 2 : 100 registros com Nome , Localização , Idade

As fontes dos dados não estão sincronizadas, portanto, tenho dados que existem na Folha 1 que não existem na Folha 2, também tenho dados na Folha 2 que não existem na Folha 1 e tenho dados que existe em ambas as folhas. Portanto, pode haver nomes na planilha 1 que não estejam na planilha 2 e vice-versa.

Estou procurando uma maneira automatizada de consolidar as duas planilhas em uma terceira planilha e preencher o nome & Localização e, quando disponível, idade e sexo. Eu sei que isso seria fácil de fazer no MS Access, mas devido ao meu público, eu preciso manter isso no Excel e eu sou um noob completo para o VBA: S

O que eu fiz : Na planilha 3, fiz fórmulas para extrair os dados da Planilha 1 e na Planilha 2 adicionei um campo ("X"), que a fórmula rotulará o campo com "1" se o campo não estiver presente na Folha 1 e rotulará com "0" se o campo estiver presente na Folha 1. Na minha cabeça, estou procurando uma maneira que indique: "Se campo" X "na Folha 2=" 1 ", extraia os dados e anexe-os à Folha 3, mas não tenho certeza de como fazer isso: (

    
por stemar805 23.06.2015 / 20:47

2 respostas

0

isso exigiria um script VBA não tão difícil.

Aqui está o pseudo código

Create Array that contains All Names from Sheet B
For i = 0 to CellFromACount
 IF A.Name is not in ArrayB
   SheetB.AddLine (Item)
Next

Para escrever o código, siga um tutorial pesquisando Excel vba tutorial em um mecanismo de pesquisa. Exemplo aqui: Tutorial do VBA

As coisas que você precisa para fazer são:

  1. Matriz de strings
  2. Obter valor da célula
  3. For Loop
  4. se condição
  5. Adicionar nova linha na parte inferior da planilha
por 24.06.2015 / 08:44
0

Isso deve funcionar. Coloque em um módulo :

Public Sub sheetmerge()
Dim wkb As Workbook
Dim wks, wks1, wks2 As Worksheet
Set wkb = ThisWorkbook
Set wks = wkb.Sheets(1)
Set wks1 = wkb.Sheets(2)
Set wks2 = wkb.Sheets(3)
emptyRow1 = False
i = 1
k = 1
' Loops while there is data on sheet 1 column 1
While emptyRow1 = False
    found = False
    ' extracts the name from column 1, row i
    name1 = wks.Cells(i, 1)
    If name1 <> "" Then
        'As it is not empty then loop through Sheet2 names
        emptyRow2 = False
        j = 1
        While emptyRow2 = False
            name2 = wks1.Cells(j, 1)
            If name2 <> "" Then
                'As name2 is not empty then compare name and name 2
                If name1 = name2 Then
                    'If name1 is the same as name2 then put the data on Sheet3
                    wks2.Cells(k, 1) = name1
                    wks2.Cells(k, 2) = wks.Cells(i, 2)
                    wks2.Cells(k, 3) = wks.Cells(i, 3)
                    wks2.Cells(k, 4) = wks1.Cells(j, 3)
                    found = True
                    k = k + 1
                    'stop looping sheet2 by setting emptyrow2 to True
                    emptyRow2 = True
                End If
            Else
                'name2 is empty, then stop looping sheet2
                emptyRow2 = True
            End If
            j = j + 1
        Wend
    Else
        'name1 is empty then stop looping Sheet1
        emptyRow1 = True
    End If
    'if after looping there was no coincidence of names then put the data from Sheet1
    If found = False Then
        If name1 <> "" Then
            wks2.Cells(k, 1) = name1
            wks2.Cells(k, 2) = wks.Cells(i, 2)
            wks2.Cells(k, 3) = wks.Cells(i, 3)
            k = k + 1
        End If
    End If
    i = i + 1
Wend
'This area loops through Sheet2 seeking for coincidences
emptyRow2 = False
j = 1
While emptyRow2 = False
    found = False
    name2 = wks1.Cells(j, 1)
    If name2 <> "" Then
        emptyRow1 = False
        i = 1
        While emptyRow1 = False
            name1 = wks.Cells(i, 1)
            If name1 <> "" Then
                If name2 = name1 Then
                    found = True
                    emptyRow1 = True
                End If
            Else
                emptyRow1 = True
            End If
            i = i + 1
        Wend
    Else
        emptyRow2 = True
    End If
    ' If there wasn't a coincidence it means this name is in sheet2 but is not on Sheet1 so, put it in Sheet3.
    If found = False Then
        wks2.Cells(k, 1) = name2
        wks2.Cells(k, 2) = wks1.Cells(j, 2)
        wks2.Cells(k, 4) = wks1.Cells(j, 3)
        k = k + 1
    End If
    j = j + 1
Wend
End Sub

Ele percorre as linhas em sheet1 colocando-as em sheet3 colocando uma quarta coluna se houver coincidência com sheet2 .

Depois disso, faz um loop em sheet2 colocando linhas sheet3 não encontradas em sheet1 .

    
por 24.06.2015 / 11:59