Selected Answer
Existing code is probably the most important part of a question (because without it it's a request), and posting it in an "Answer" - which is to say a "Solution" - may not have added to the clarity of your post but it set me thinking and this is the answer I came up with. Paste the code in a standard code module and call the sub AddDate with a suitable keyboard shortcut.
Sub AddDate()
' 26 May 2019
Const DatFmt As String = "dd mmm, yyyy"
Dim CellVal As String
Dim Sp() As String
Dim n As Integer, p As Integer
Dim HasDate() As Boolean
Dim i As Integer
With ActiveCell
CellVal = Trim(.Value) ' remove leading / trailing blanks
Sp = Split(CellVal, Chr(10)) ' split CellVal into lines
n = UBound(Sp)
If n > -1 Then
' the cell isn't blank
ReDim HasDate(n)
For i = 0 To n
HasDate(i) = FormatDate(Sp(i), DatFmt)
Next i
' return formatted text to cell and colour the dates
CellVal = Join(Sp, Chr(10))
.Value = CellVal
.Font.ColorIndex = xlAutomatic
For i = 0 To n
If HasDate(i) Then
If i Then p = InStr(WorksheetFunction.Substitute(CellVal, Chr(10), Chr(160), i), Chr(160))
.Characters(p + 1, Len(DatFmt)).Font.Color = 12611584
End If
Next i
End If
End With
End Sub
Private Function FormatDate(Txt As String, _
Fmt As String) As Boolean
' 26 May 2019
Dim Sp() As String
Dim DatVal As Variant
Dim n As Integer
Sp = Split(Txt)
n = UBound(Sp)
If n > -1 Then
' the line isn't blank
If IsDate(Sp(0)) Then
' the first word is a date
Sp(0) = Format(Sp(0), Fmt)
Txt = Join(Sp)
FormatDate = True
Else
' check if the line already has a formatted date
If n >= UBound(Split(Fmt)) Then
FormatDate = IsDate(Sp(0) & " " & Sp(1) & " " & Sp(2))
End If
End If
End If
End Function
The rules are simple. The code will look for a date at the beginning of each line of text in the cell. The "beginning" is either at the start or after a line break (Alt+Return). If there is a short date at the beginning of a line it will be formatted on the pattern given by the constant DatFmt. A "short" date is a date contained in a single word, such as you would be able to insert using Ctl+;. Note that you could change that format to consist of several words. My code wouldn't recognise that as a "date" however. It looks for one word, uninterrupted by spaces.
If no such word is found at the beginning of a text line the code checks whether an already formatted date, consisting of 3 words (match DatFmt), exists. Such dates, as well as those reformatted in the step above, will be coloured blue. All the rest of the text is given the default colour (black, unless you changed it). Dates in a different format or not at the beginning of a line will neither be formatted nor coloured. I tried to anticipate leading or trailing blanks which might upset the recognition system but extra invisible characters is what you should look for whenever the program doesn't do what you expect.
Such, you will be able to write the entire text of a cell with several dates in it, each at the beginning of a new line, and then run the code to give the format. I abstained from adding the dash into the date format because you will want to treat it as part of the text format, not the date format. However, you can add it to the value of constant DatFmt if you so wish. I also decided against inserting today's date automatically because you can insert it error-free with Ctl+; which is faster to do than insert a placeholder.