Perhaps you could use a macro like this?

Sub Chem_Format()

    Dim cell        As Range
    Dim s           As String
    Dim i           As Long

    For Each cell In Selection
        s = cell.Text
        For i = 1 To Len(s) - 1
            If Mid(s, i, 2) Like "[A-Za-z)]-" Then cell.Characters(i + 1, 1).Font.Superscript = True
            If Mid(s, i, 2) Like "[A-Za-z)]+" Then cell.Characters(i + 1, 1).Font.Superscript = True
            If Mid(s, i, 2) Like "[A-Za-z)]#" Then cell.Characters(i + 1, 1).Font.Subscript = True
            If Mid(s, i, 3) Like "[A-Za-z)]#-" Then cell.Characters(i + 1, 2).Font.Superscript = True
            If Mid(s, i, 3) Like "[A-Za-z)]#+" Then cell.Characters(i + 1, 2).Font.Superscript = True
            If Mid(s, i, 4) Like "[A-Za-z)]##-" Then cell.Characters(i + 2, 2).Font.Superscript = True
            If Mid(s, i, 4) Like "[A-Za-z)]##+" Then cell.Characters(i + 2, 2).Font.Superscript = True
            If Mid(s, i, 2) Like "[Mm]#" Then cell.Characters(i + 1, 1).Font.Superscript = True
        Next i
    Next cell
End Sub
Select the range you whish to "transfer" and run macro. The only problem with this macro is if the charge is + or - one unit and the number of molecules before the + or - is equal or greater than 2 it will transfer molecule number to charge number. One workaround is writing NO3- as NO31- and edit.

Don't remember the original author of this macro. I think snb or shg wrote it and I've extended it to transfer more complex formulas.

Alf