Explanation
The gist: this formula “floods” the space between words in a text string with a large number of spaces, finds and extracts the substring of interest, and uses the TRIM function to clean up the mess.
Working from the inside out, the original text in B5 is flooded with spaces using SUBSTITUTE:
SUBSTITUTE(B5," ",REPT(" ",99))
This replaces each single space with 99 spaces.
Note: 99 is just an arbitrary number that represents the longest word you need to extract.
Next, the FIND function locates the specific character (in this case, “@”) inside the flooded text:
FIND("@",SUBSTITUTE(B5," ",REPT(" ",99)))-50
FIND returns the position of the “@” in this text, from which 50 is subtracted. Subtracting 50 effectively “walks back” the position to someplace in the middle of the spaces preceding the substring of interest. In the example shown, the calculated position is 366.
The MAX function is used to handle the problem of the substring appearing first in the text. In that case, the position will be negative, and MAX is used to reset to 1.
With a starting positing established , MID is used to extract 99 characters of text, starting at 366 from the text in B5, again flooded with space:
MID(SUBSTITUTE(B5," ",REPT(" ",99)),366,99)
This extracts the substring of interest, with a lot of space characters before and after.
Finally, the TRIM function is used to trim leading and trailing space, and returns substring containing the special character.
Explanation
Starting from the inside out, the MID function is used to extract all text after “@”:
MID(B5,FIND("@",B5),LEN(B5))
The FIND function provides the starting point, and for total characters to extract, we just use LEN on the original text. This is a bit sloppy, but it avoids having to calculate the exact number of characters to extract. MID doesn’t care if this number is bigger than the remaining characters, it simply extracts all text following “@”.
Next, we “flood” the remaining text with space characters, by replacing any single space with 100 spaces using a combination of SUBSTITUTE and REPT:
SUBSTITUTE("@word and remaining text"," ",REPT(" ",100))
This seems crazy, but the logic becomes clear below.
Next, to extract just the word we want (i.e. @word), we use LEFT to extract the first 100 characters from the left. This gets us “@word”, plus many extra spaces. To visualize, the hyphens below represent spaces:
@word———————
Now we just need to remove all extra spaces. For that, we use the TRIM function.
Note: 100 represents the longest word you expect to find that begins with the special character. Increase or decrease to suit your needs.