Código:
Function MakeCompact(times As Range, shedules As Range, letter As String) As String
Dim i As Integer, n As Integer
If times.Cells.Count <> shedules.Cells.Count + 1 Then
MakeCompact = "Error. Wrong source data."
Exit Function
End If
n = times.Cells.Count
MakeCompact = ""
For i = 1 To n
If letter = shedules.Cells(1, i).Value Then
If Right(MakeCompact, 1) <> "-" Then
MakeCompact = MakeCompact & "," & times.Cells(1, i).Value & "-"
End If
Else
If Right(MakeCompact, 1) = "-" Then
MakeCompact = MakeCompact & times.Cells(1, i).Value
End If
End If
Next
MakeCompact = Mid(MakeCompact, 2)
End Function
Uso:
Crie a tabela:
A B C D E F G
1 name 1 2 3 4 5 6
2 bob m m b m m
3 fred b m e e
4
5 m b e
6 bob
7 fred
O intervalo A1: G7 é dado de origem (linha 1 é cabeçalho).
O intervalo A5: D7 é uma tabela que queremos preencher.
Insira em B6 a fórmula:
=MakeCompact($B$1:$G$1;$B2:$F2;B$5)
Arraste-o horizontalmente e verticalmente para preencher as células.
Acho que esta ideia é suficiente para criar a solução da sua tarefa.
PS. Preste atenção - há uma coluna adicional sobre o tempo de espera.
PPS. Após a depuração, torne a função Volátil.