I would suggest a better tool like for example Power Query, one which is better suited for manipulating tables and lists:
let
// Load source table
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Filter = Table.SelectRows(Source, each ([Codes] <> null)),
// Split "Codes" column into a list
ExpandedCodes = Table.TransformColumns(Filter, {"Codes", each Text.Split(_, ","), type list}),
// Expand "Codes" column into multiple rows
ExpandRows = Table.ExpandListColumn(ExpandedCodes, "Codes"),
// Remove empty values in "Codes" column
RemoveBlanks = Table.SelectRows(ExpandRows, each [Codes] <> ""),
// Rename column for clarity
RenamedColumns = Table.RenameColumns(RemoveBlanks, {{"Codes", "Code"}}),
// Group by Code and count occurrences
GroupedTable = Table.Group(RenamedColumns, {"Code"}, {{"Total", each Table.RowCount(_), Int64.Type}})
in
GroupedTable

Edit: you could also easily do it with Python:
import pandas as pd
# Hardcoded input data
data = {
"Name": ["James", "Beth", "Holly", "Jimmy", "Peter", "Charlie", "Sue", "", "Sofie"],
"Codes": ["1,2", "2,3,4", "6,8,9", "2,A,CR", "", "1,3,5", "", "", "1,CR"]
}
# Convert to DataFrame
df = pd.DataFrame(data)
# Split "Codes" column into multiple rows
df_exploded = df.assign(Codes=df['Codes'].str.split(',')).explode('Codes')
# Remove empty values
df_exploded = df_exploded[df_exploded['Codes'].notna() & (df_exploded['Codes'] != "")]
# Rename "Codes" column to "Code"
df_exploded.rename(columns={'Codes': 'Code'}, inplace=True)
# Count occurrences of each unique "Code"
df_grouped = df_exploded.groupby("Code").size().reset_index(name="Total")
# Display the final table
print(df_grouped)