Notifications
Clear all

Funções de Indíce e Correspondência.

3 Posts
2 Usuários
0 Reactions
874 Visualizações
(@bracinho)
Posts: 69
Trusted Member
Topic starter
 

Pessoal, bom dia!

Conheço algumas fórmulas que auxilia-nos a pesquisarmos resultados a partir de uma referencia.

O problema é que, as vezes, não basta apenas conhecê-las, temos que usar a criatividade.

O exemplo anexado trás um relatório extraído do sistema da empresa onde trabalho. Nele consta os nomes dos empregados e os dias de abano que cada um deles tiveram.

O problema todo é que, como podem observar, o layout dele não favorece a criação de filtros.

Vejam que na Sheet "Monitoramento" eu fiz um exemplo de como eu gostaria que ele ficasse. Talvez não seja a melhor opção. O meu objetivo maior é fazer filtros que permita-me pesquisar por nome e/ou datas.

Conto com a ajuda de vocês.

 
Postado : 01/10/2015 4:56 am
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Olá Bracinho!
Criar uma nova planilha com os dados no layout que você deseja talvez até seja possível utilizando fórmulas matriciais, porém elas serão demasiadamente complexas.
Tenho 2 sugestões para o seu caso:

1ª Sugestão: Ajustando manualmente o BD:
a)Insira uma nova coluna, antes da coluna A, e na na célula A3 aplique a fórmula: =SE(NÚM.CARACT(C3)=3;A2;C3)
b)Copie a fórmula para até a última linha do BD
c)Transforme em valores a coluna A
d)Aplique o autofiltro na linha 2
e)Comece a filtrar os valores indesejados e apague as linhas (Sugestão é filtre por 0 na Coluna A, apague as linhas, então filtre as vazias na coluna I e apagua as linhas)
f) Apague as colunas que não te interessam

2ª Sugestão: Use um código VBA para fazer o novo BD:
Rode o código abaixo a partir da célula onde você deseja que seja montado o novo BD.

Option Explicit

Sub Criar_BD_Abono()

    Dim i As Long
    Dim rLast As Long
    Dim LinhaNome As Long
    Dim NewBDCell As Range
    
    Set NewBDCell = ActiveCell
    Application.Goto Sheets("BD").Range("A1")
    rLast = Sheets("BD").Range("A1", Range("A1").SpecialCells(xlLastCell)).Rows.Count
    Application.Goto NewBDCell

    For i = 1 To rLast
      If Len(Sheets("BD").Range("B" & i)) > 3 Then
        LinhaNome = i
      Else
        If Sheets("BD").Range("B" & i) <> "" Then
            ActiveCell.Value = Sheets("BD").Range("B" & LinhaNome).Value 'Nome do funcionário
            ActiveCell.Offset(0, 1).Range("A1").Value = Sheets("BD").Range("A" & i).Value 'Data do abono
            ActiveCell.Offset(0, 1).Range("A1").NumberFormat = "dd/mm;@" 'Ajuste da data para formato dd/mm
            ActiveCell.Offset(0, 2).Range("A1").Value = Sheets("BD").Range("H" & i).Value 'Motivo do Abono
            ActiveCell.Offset(0, 3).Range("A1").Value = Sheets("BD").Range("A" & LinhaNome).Value 'Código Do funcionário
            ActiveCell.Offset(0, 4).Range("A1").Value = Sheets("BD").Range("G" & LinhaNome).Value 'Cargo
            ActiveCell.Offset(1, 0).Activate
        End If
      End If
    Next i
End Sub

Qualquer dúvida pergunte.

Abs!

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 01/10/2015 6:12 am
(@bracinho)
Posts: 69
Trusted Member
Topic starter
 

Issamu,

Eu estava certo em dizer que, as vezes, não basta apenas conhecermos as fórmulas, mas sim usarmos a criatividade.

Defendo essa tese, pois, com o simples fato de inserir a fórmula =SE(NÚM.CARACT(C3)=3;A2;C3) na coluna A, como sugerido por você, matou toda a charada de forma simples e eficaz!

Meus parabéns e muito obrigado!

 
Postado : 01/10/2015 10:54 am