Este não é realmente o método mais limpo, mas você pode apenas verificar cada célula preenchida passando por elas a partir de um deslocamento de 2 até chegar a uma célula vazia. Note que este código não foi testado.
For i = LBound(a) To UBound(a)
For t = LBound(b) To UBound(b)
If UCase(a(i)) = UCase(b(t)) Then
clm = 2
Do While True
If UCase(cel.Offset(, clm)) = UCase(a(i)) Then
Exit Do
End If
If cel.Offset(, clm) = "" Then
cel.Offset(, clm) = a(i)
Exit Do
End If
clm = clm + 1
Loop
End If
Next
Next