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