Superscript all numeric characters after ^ in an excel cell
Formatting individual characters in a string is relatively slow.  My solution convert the exponents to superscript using Ascii and Unicode characters.  This allows me to work with the values in an array and then write it back over the original range.  

Using characters code took 0.79 seconds to process 10,000 cells compared to 42.05 using formatting individual characters.  The file size increased by 14KB using the character codes and 50KB using character formatting.

Before &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; After

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;


Code to Convert Exponents to SuperScript Characters

Function convertExponentsToSuperScript(Text As String, Optional ExponentChar As String = "^") As String
    If InStr(Text, ExponentChar) = 0 Then
        convertExponentsToSuperScript = Text
        Exit Function
    End If
    Dim newText() As String
    ReDim newText(Len(Text) - UBound(Split(Text, ExponentChar)))

    Dim exponentChars() As Variant
    exponentChars = Array(ChrW(&amp;H2070), Chr(185), Chr(178), Chr(179), _
                          ChrW(&amp;H2074), ChrW(&amp;H2075), ChrW(&amp;H2076), ChrW(&amp;H2077), _
                          ChrW(&amp;H2078), ChrW(&amp;H2079))

    Dim textIndex As Long, newTextIndex As Long
    Dim ch As String
    Dim flag As Boolean

    For textIndex = 1 To Len(Text)
        ch = Mid(Text, textIndex, 1)
        If ch = ExponentChar Then
            flag = True
        Else
            newTextIndex = newTextIndex + 1
            If flag Then
                If IsNumeric(ch) Then
                    ch = exponentChars(ch)
                Else
                    flag = False
                End If
            End If

            newText(newTextIndex) = ch
        End If
    Next

    convertExponentsToSuperScript = Join(newText, "")
End Function


Test Code

Sub TestConvertExponentsToSuperScript()
    Dim target As Range
    Dim results As Variant
    Set target = Selection ' getTestRange(10000)
    results = target.value

    Dim t As Double: t = Timer

    Dim r As Long
    For r = 1 To UBound(results)
        results(r, 1) = convertExponentsToSuperScript(CStr(results(r, 1)))
    Next

    target.value = results

    Debug.Print Round(Timer - t, 2)
End Sub

Function getTestRange(TestRows As Long) As Range
    Dim results() As String
    ReDim results(1 To TestRows, 1 To 1)
    Dim r As Long
    For r = 1 To UBound(results)
        results(r, 1) = "O2 Permeability [cm^" &amp; WorksheetFunction.RandBetween(0, 1000) &amp; "/m^" &amp; WorksheetFunction.RandBetween(0, 1000) &amp; "]"
    Next
    Application.ScreenUpdating = False

    With Worksheets.Add
        .Range("A1") = "Test Data"
        With .Range("A2").Resize(UBound(results))
            .value = results
            Set getTestRange = .Cells
        End With
    End With
End Function