You're right, I believe this will not respect the order i.e. a field could contain any records depending on order or amount of delimited records.
My go-to would be to script it, do you have any scripting experience?
I haven't tested this so there's likely something wrong, but give it a try and let me know how it goes.
import arcpy fc = path_to_fc # Get list of fields, ignoring ObjectID # Assumes that all other fields are valid for the separated list values to go fields = [f.name for f in arcpy.ListFields(fc) if f.type != "OID" or f.name != "OBJECTID"] # Put the field with the sparated values at the end of the list # so it's easy to identify. sep_field = fields.pop(fields.index("test")) fields.append(sep_field) with arcpy.da.UpdateCursor(fc, fields) as cursor: for row in cursor: # Make list of individual values # Assumes separators are always a comma (no space). sep_values = row[-1].split(",") # Make list of columns to receive values sep_columns = row[:-1] for i, value in enumerate(sep_values): # Put each value into a column. # Will yield IndexError if there are too many values for the columns. sep_columns[i] = value # Any additional columns that don't have a new value # will retain their original value (if any). # Put the original separated list of values # back with the new column values. row = sep_columns.append(sep_values) # Update the row in the table cursor.updateRow(row)