Dealing With SuperScripts/Subscripts
Sometimes you receive data or copy data that has superscripts or subscripts that you really don’t want to be included. This article will explore three actions that can be automated throughout your cell selection via VBA code.
Deleting all superscripts or subscripts from cells
Removing the superscript or subscript formatting from cells
Converting the last character of each cell to a superscript/subscript (based on criteria)
Keep in mind as you work through this article that the “scripting” is done at a character level. Hence, the most of VBA code written will be looping through characters within each cell. This is similar to how you would manually apply a super/subscript (selecting the specific character(s) and applying the format).

Deleting Superscripts/Subscripts
If you’ve imported or copied data into your spreadsheet that contains superscripts or subscripts, you may want to remove them prior to doing analysis or further manipulation. This can be a very tedious and manual task. That is why I created the following VBA code to loop through all cells in a currently selected range and wipe out those superscripts and subscripts.
Sub DeleteFontScripts()
'PURPOSE: Delete any superscripts/subscripts from selected range
Dim cell As Range
Dim x As Long
'Ensure a cell range is selected
If TypeName(Selection) <> "Range" Then Exit Sub
'Optimize Code
Application.ScreenUpdating = False
'Loop through each cell in User's Selection
For Each cell In Selection.Cells
'Loop through each character in cell value
For x = 1 To Len(cell.Value)
'Test the character for the superscript/subscript property
With cell.Characters(x, 1)
If .Font.Superscript = True Or .Font.Subscript = True Then
.Delete
x = x - 1
End If
End With
Next x
Next cell
End Sub
Remove Superscript/Subscript Formatting
If you are looking to simply remove any and all characters from a superscript or subscript state, you can simply toggle the property off for the entire selected range.
Sub FontScript_Remove()
'PURPOSE: Remove any Superscript/Subscript formatting from selected range
'Ensure a cell range is selected
If TypeName(Selection) <> "Range" Then Exit Sub
'Remove Superscript formattting from cells
Selection.Font.Superscript = False
'Remove Subscript formatting from cells
Selection.Font.Subscript = False
End Sub
Adding Superscript/Subscript To Cell Text
It can be really annoying to have to highlight specific characters, go into the Font settings, and check the Superscript or Subscript checkboxes. What if you could simply type out your superscript/subscript and click a button to apply the format? Here are a couple of VBA macro options you could utilize to accomplish this.
VBA Macro #1
The below VBA code will test each cell in the user’s selected range to see if the last two characters of text are numbers or capitalized letters. If either case is true, the character(s) will be formatted as a superscript. You can easily substitute the Superscript property with Subscript property to get the converse effect.
Sub AutoSuperscript()
'PURPOSE: Add superscript to last two characters if numerical or capitalized
Dim cell As Range
'Ensure a cell range is selected
If TypeName(Selection) <> "Range" Then Exit Sub
'Optimize Code
Application.ScreenUpdating = False
'Loop through each cell in User's Selection
For Each cell In Selection.Cells
'Superscript last two characters (if numeric/capitalized)
If IsNumeric(Right(cell.Text, 2)) = True Then
cell.Characters(Len(cell) - 1, 2).Font.Superscript = True
ElseIf IsNumeric(Right(cell.Text, 1)) = True Then
cell.Characters(Len(cell), 1).Font.Superscript = True
ElseIf Right(cell.Text, 2) Like "*[A-Z]*" Then
cell.Characters(Len(cell) - 1, 2).Font.Superscript = True
ElseIf Right(cell.Text, 1) Like "*[A-Z]*" Then
cell.Characters(Len(cell), 1).Font.Superscript = True
End If
Next cell
End Sub
Here is a before/after displaying how this macro performs in action:
VBA Macro #2
The below VBA code will test each cell in the user’s selected range to see if the last two characters of text are not lowercase alphanumeric characters. If found true, the character(s) will be formatted as a superscript. This will better handle special characters (ie asterisk) that you would wish to superscript.
Sub AutoSuperscript_Alternative()
'PURPOSE: Add superscript to last two characters if not lowercase
Dim cell As Range
'Ensure a cell range is selected
If TypeName(Selection) <> "Range" Then Exit Sub
'Optimize Code
Application.ScreenUpdating = False
'Loop through each cell in User's Selection
For Each cell In Selection.Cells
'Superscript last two characters (if not lowercase)
If Not Right(cell.Text, 2) Like "*[a-z]*" Then
cell.Characters(Len(cell) - 1, 2).Font.Superscript = True
ElseIf Not Right(cell.Text, 1) Like "*[a-z]*" Then
cell.Characters(Len(cell), 1).Font.Superscript = True
End If
Next cell
End Sub
Here is a before/after displaying how this macro performs in action:
I Hope This Helped!
Hopefully, I was able to explain how you can use VBA code to apply and remove superscript/subscript formattting. If you have any questions about this technique or suggestions on how to improve it, please let me know in the comments section below.
About The Author
Hey there! I’m Chris and I run TheSpreadsheetGuru website in my spare time. By day, I’m actually a finance professional who relies on Microsoft Excel quite heavily in the corporate world. I love taking the things I learn in the “real world” and sharing them with everyone here on this site so that you too can become a spreadsheet guru at your company.
Through my years in the corporate world, I’ve been able to pick up on opportunities to make working with Excel better and have built a variety of Excel add-ins, from inserting tickmark symbols to automating copy/pasting from Excel to PowerPoint. If you’d like to keep up to date with the latest Excel news and directly get emailed the most meaningful Excel tips I’ve learned over the years, you can sign up for my free newsletters. I hope I was able to provide you some value today and hope to see you back here soon! - Chris