Sure! Sorry for not providing some more context last night – I had to get to bed 
First, an update to the formula above to fix a small bug and add some more #ERROR checking:
IF(OR({Start Date}=BLANK(), {End Date}=BLANK()), '🔥Missing one or more dates!', IF(
YEAR({End Date})-YEAR({Start Date})>2,
'🔥Date range is too large!',
IF(
IS_AFTER({Start Date}, {End Date}),
'🔥Start date is after end date!',
SUBSTITUTE(DATETIME_FORMAT({Start Date}, 'MMM')&' '&DATETIME_FORMAT({Start Date}, 'YY')&
IF(
OR(DATETIME_DIFF({End Date}, {Start Date}, 'months')>1, ABS(MONTH({End Date})-MONTH({Start Date}))>1),
', '&SUBSTITUTE(MID('Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec', FIND(DATETIME_FORMAT({Start Date}, 'MMM'), 'Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec')+5, 3+5*(DATETIME_DIFF({End Date}, {Start Date}, 'months')-1)), ', ', ' '&DATETIME_FORMAT({Start Date}, 'YY')&', ')&IF(MONTH({Start Date})!=12, ' '&DATETIME_FORMAT({Start Date}, 'YY')))&
IF(
YEAR({End Date})-YEAR({Start Date})>1,
', '&SUBSTITUTE('Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec', ', ', ' '&DATETIME_FORMAT(DATEADD({Start Date}, 1, 'year'), 'YY')&', ')&' '&DATETIME_FORMAT(DATEADD({Start Date}, 1, 'year'), 'YY'))&
IF(
AND(
MONTH({Start Date})!=MONTH({End Date}),
YEAR({Start Date})=YEAR({End Date})),
', '&DATETIME_FORMAT({End Date}, 'MMM')&' '&DATETIME_FORMAT({End Date}, 'YY'),
IF(
YEAR({Start Date})!=YEAR({End Date}),
', '&SUBSTITUTE(LEFT('Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec', FIND(DATETIME_FORMAT({End Date}, 'MMM'), 'Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec')+2), ', ', ' '&DATETIME_FORMAT({End Date}, 'YY')&', ')&' '&DATETIME_FORMAT({End Date}, 'YY'))), ', , ', ', '))))
The first three IF()
statements check for errors: if any dates are missing, if the date range covers more than 3 years, or if the start date is after the end date.
After that, the SUBSTITUTE()
function removes any doubled-up commas (, ,), while the following concatenated DATETIME_FORMAT()
functions will give the month and year of the start date.
Then, things get a little tricky. The next IF()
statement uses the methods you describe (string trimming a pre-specified string of months in a year, based on the month of the starting date AND the number of months between the start and end dates. Since all month abbreviations are three characters, this allows us to calculate the exact number of characters to trim) to insert the following months for that current year. An additional SUBSTITUTE()
function swaps out the commas in the list of months with the two-digit year (of the starting year), followed by a comma.
The next IF()
triggers if there is a third, middle year in between the start and end years – using the string trimming and substitution methods above to insert a string of months (from Jan - Dec) with the middle year included. Expanding this formula to cover more years would require duplicating this section and adjusting the DATEADD()
formula to add 2, 3, 4… years. You would also need to adjust some of the YEAR()
-based qualifiers for other IF()
statements in the function (the second IF() statement, for example).
The next IF()
statement is a nested IF()
, which takes care of the month/year for the end date. This can run into some issues if the ending year is different from the start – namely, the months from January to the end month won’t be included. The nested IF()
will include those, up until the final month 