Ciao,
anche se hai già la soluzione con le formule ti propongo, per curiosità, una possibile procedura VBA.
Parto dal presupposto che i dati partano da A1 (altrimenti occorre cambiare i parametri per assegnare l'intervallo dati) e che i dati vengano riportati in D1.
Altro presupposto che i dati siano sempre di "tre in tre" e che sia presente sempre almeno il primo valore del nominativo.
Potrebbero non essere presenti i due successivi.
Sub TrasponiDati()
Dim rng As Range
Dim nR As Long
Dim i As Long
Dim arrIn As Variant
Dim arrOut() As String
Dim contR As Long
Set rng = Intersect(ActiveSheet.UsedRange, Columns("A"))
nR = rng.Rows.Count
arrIn = rng.Value
For i = 1 To nR Step 3
If arrIn(i, 1) <> "" Then
contR = contR + 1
ReDim Preserve arrOut(1 To 3, 1 To contR)
arrOut(1, contR) = arrIn(i, 1)
If i + 1 <= nR Then arrOut(2, contR) = arrIn(i + 1, 1)
If i + 2 <= nR Then arrOut(3, contR) = arrIn(i + 2, 1)
End If
Next i
Range("D1").CurrentRegion.ClearContents
If contR > 0 Then
Range("D1").Resize(contR, 3).Value = Application.Transpose(arrOut)
End If
End Sub
Prova a vedere se funziona con i tuoi dati reali.
ciao