Maybe configuration difficulty levels should be introduced: when you first boot the switch, you get to choose between infant, normal and Extreme mode. Infant mode displays graphical wizards for everything. Normal would be more or less what we have now. Extreme difficulty displays no output whatsoever, not even an echo of what you type. That last one is what real experts are craving.
Now getting back to your question 😃
First, I believe whatever information you choose to display, it should be clear from the output that all ports were set, while some could not be set. (So that people don't think there was an error and need to repeat the command. I am sometimes lazy myself and just set ranges even though I know it will fail for some ports.)
Now we can have ranges specified for the VLAN as well as the ports, and there are additional settings like specifying an STP domain and such. Setting any of these could go wrong.
My first approach would have been to display conflicts in one summary line of output like "Ports configured, however ports already were tagged members of VLAN ." Similar output for stuff to be deleted that does not exist in the first place: "Ports configured, however ports already were not members of VLAN ." As per the previous paragraph, it is not that easy though.
Either one displays one line per conflict, or one has to group either by port or VLAN:
1)
* Port could not be added to VLAN
* Port could not be added to VLAN
* Port could not be added to VLAN
2)
* Port could not be added to VLAN
* Port could not be added to VLAN
3)
* Port could not be added to VLANs
* Port could not be added to VLAN
As I said one should also think about the conflicts that can occur by using other parameters of "configure vlan add/delete" (like "stpd")
Finally, one might give a configuration setting allowing to choose whether to display these informational messages or not. Maybe a similar setting for something else already exists and one could add the new informational messages to the set of messages part of that configuration. (I like it for example how you give people the freedom to choose whether they want a constant refresh using "show port" or not (using "disable/enable cli refresh"). That's what makes EXOS sexy.)