none
Fazer Cruzamento de Dados? RRS feed

  • Pergunta

  • Ola Pessoal

    eu queria saber como fazer cruzamento de dados em excel 2007.

    O PROBLEMA É O SEGUINTE:

       Tenho duas folhas de excel onde um tem duas colunas e outra uma coluna:

       Folha 1:

     coluna 1: Nome

          coluna 2: estado

      Folha 2:

    Coluna 1: Nome

    eu quero pegar todas as linhas onde os nome conscidem e o respectivo estado

    Obrigado

    sexta-feira, 27 de abril de 2012 13:23

Respostas

  • VBA ou fórmula?

    Se for VBA:

    Option Explicit

    Private Enum cBD
        Nome = 1
        Estado = 2
    End Enum

    Private Enum cResumo
        Estado = 1
        Nomes = 2
    End Enum

    Sub CriarResumo()
        Const c_sResumo As String = "Plan2"
        Const c_sBD As String = "Plan1"
        
        Dim lResumo As Long
        Dim lBD As Long
        Dim wsResumo As Worksheet
        Dim wsBD As Worksheet
        
        With ThisWorkbook
            'Apaga Planilha de Resumo, se existir
            On Error Resume Next
            Application.DisplayAlerts = False
            .Sheets(c_sResumo).Delete
            Application.DisplayAlerts = True
            On Error GoTo 0
            
            'Cria Planilha de Resumo
            Set wsResumo = .Sheets.Add
                'Cria cabeçalhos
                With wsResumo
                    .Name = c_sResumo
                    .Cells(1, cResumo.Nomes) = "Nomes"
                    .Cells(1, cResumo.Estado) = "Estado"
                End With
        
            'Atribui wsBD à Planilha que contém Banco de Dados
            Set wsBD = ThisWorkbook.Sheets(c_sBD)
        End With
            
        'Considerando uma linha de cabeçalho
        For lBD = 2 To RowLast(wsBD.Columns(cBD.Nome))
            lResumo = RowOf(wsBD.Cells(lBD, cBD.Estado), wsResumo.Columns(cResumo.Estado))
            If lResumo = 0 Then
                lResumo = RowLast(wsResumo.Columns(cResumo.Estado)) + 1
                wsResumo.Cells(lResumo, cResumo.Estado) = wsBD.Cells(lBD, cBD.Estado)
            End If
            wsResumo.Cells(lResumo, ColLast(wsResumo.Rows(lResumo)) + 1) = wsBD.Cells(lBD, cBD.Estado).Row
        Next lBD
    End Sub

    Private Function RowLast(rng As Range) As Long
        'Retorna o valor da última linha povoada de uma coluna
        With rng
            RowLast = .Find(What:="*" _
              , After:=.Cells(1) _
              , SearchDirection:=xlPrevious _
              , SearchOrder:=xlByColumns _
              , LookIn:=xlFormulas).Row
        End With
    End Function

    Function ColLast(rng As Range) As Long
        'Retorna o valor da última coluna povoada de uma linha
        With rng
            ColLast = .Find(What:="*" _
              , After:=.Cells(1, 1) _
              , SearchDirection:=xlPrevious _
              , SearchOrder:=xlByRows _
              , LookIn:=xlFormulas).Column
        End With
    End Function

    Private Function RowOf(str As String, rng As Range) As Long
        'Retorna o valor da linha de um elemento num vetor. Caso não seja encontrado, é retornado 0.
        On Error Resume Next
        RowOf = WorksheetFunction.Match(str, rng, 0)
    End Function

    Se quiser uma solução por fórmulas, experimente ver a página de Retornar Todas as Correspondências de um PROCV: http://www.ambienteoffice.com.br/excel/retornar_todas_as_correspondencias_de_um_PROCV/


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 27 de abril de 2012 22:05
    Moderador