Fala Victor e João, tudo bem?
João, sou professor na Alura e conduzi os novos cursos de Excel. Temos alguns exemplos novos e uma nova abordagem.
A pedido da Alura, estou ajudando você com esse tópico do curso anterior, mas confesso que seu pedido é muito complexo para fazermos com fórmulas.
É o típico caso, onde usar VBA é melhor e "mais fácil". Digo mais fácil entre aspas, porque o VBA tem sua complexidade natural...
Fiz aqui uma solução para o seu problema atual, mas a ideia é "ensinar a pescar" e não "dar o peixe", concorda? rrsrsrsrsrs
Para esse problema usei duas abordagens diferentes, uma função para buscar os dispositivos (problema 1) e uma rotina para buscar as datas e horas (problema 2).
Aviso: mudar o formato ou nome das planilhas pode comprometer o funcionamento das macros.
####################################
CÓDIGO DA FUNÇÃO:
####################################
Function fnProcuraDispositivos(pUsuario As String) As String
Dim lContaLinhas As Long
Dim auxRetorno As String
auxRetorno = vbNullString
lContaLinhas = 2
Do While Sheets("P1").Range("B" & lContaLinhas) <> vbNullString
If Trim$(UCase(pUsuario)) = Trim$(UCase(Sheets("P1").Range("B" & lContaLinhas))) Then
If Trim$(auxRetorno) <> vbNullString Then
If InStr(1, auxRetorno, Trim$(Sheets("P1").Range("D" & lContaLinhas))) < 1 Then
auxRetorno = auxRetorno & "; " & Trim$(Sheets("P1").Range("D" & lContaLinhas))
End If
Else
auxRetorno = Trim$(Sheets("P1").Range("D" & lContaLinhas))
End If
End If
lContaLinhas = lContaLinhas + 1
Loop
fnProcuraDispositivos = auxRetorno
End Function
####################################
CÓDIGO DA ROTINA:
####################################
Sub sbPreencheDataHora()
Dim lContaColunas As Integer
Dim lContaLinhasOrigem As Long
Dim lContaLinhasDestino As Long
lContaColunas = 1
Worksheets("DISPOSITIVOS").EnableCalculation = False
Do While Cells(2, lContaColunas) <> vbNullString
lContaLinhasOrigem = 2
lContaLinhasDestino = 3
Do While Sheets("P1").Range("B" & lContaLinhasOrigem) <> vbNullString
If Trim$(UCase(Cells(2, lContaColunas))) = Trim$(UCase(Sheets("P1").Range("B" & lContaLinhasOrigem))) Then
Cells(lContaLinhasDestino, lContaColunas) = Trim$(Sheets("P1").Range("A" & lContaLinhasOrigem))
lContaLinhasDestino = lContaLinhasDestino + 1
End If
lContaLinhasOrigem = lContaLinhasOrigem + 1
Loop
lContaColunas = lContaColunas + 1
Loop
Worksheets("DISPOSITIVOS").EnableCalculation = True
End Sub