Length = Len(ActiveCell.Value)
For i = 1 To Length
If (Mid(ActiveCell.Value, i, 1) = ".") Then
ActiveCell.Value = "'" & Left(ActiveCell.Value, i - 1) & Right(ActiveCell.Value, Length - i)
ActiveCell.Characters(i, Length - i).Font.Superscript = True
ActiveCell.HorizontalAlignment = xlRight
Exit For
End If
Next i
Eu acredito que a maior parte disso é auto-explicativa.
Left(ActiveCell.Value, i - 1) & Right(ActiveCell.Value, Length - i)
reconstrói o conteúdo da célula
com a substring à esquerda do . (no seu exemplo, 3 )
concatenada com a substring à direita do . ( 45 ),
deixando de fora o . em si.
Eu coloquei um ' na frente dele para transformá-lo em texto -
aparentemente você não pode formatar caracteres individuais em um valor numérico.
Eu configurei o alinhamento horizontal para a direita porque isso é normal para números,
mas a célula agora é texto e o padrão é alinhado à esquerda.