Você não está muito longe: Split () retorna uma matriz de strings baseada em 0 como esta:
Split Array (0): blue story 1
Split Array (1): red tree 2
Split Array (2): orange flower 3
Split Array (3): green car 6
para corrigir seu código, você precisa verificar cada valor na matriz:
Public Sub test()
Dim fld As Variant, rng As Range, cell As Range, i As Long
Set rng = Range("A1:A5")
For Each cell In rng.Cells
If InStr(1, cell.Value, "Red", vbTextCompare) > 0 Then
fld = Split(cell.Value, "|")
For i = 0 To UBound(fld)
If InStr(1, fld(i), "Red", vbTextCompare) > 0 Then
Cells(cell.Row, 2).Value = fld(i)
Exit For
End If
Next
End If
Next
End Sub
Você também pode usar o texto em colunas ou uma fórmula como esta
=MID(A2,SEARCH("Red",A2,1),SEARCH("|",A2,SEARCH("Red",A2,1))-SEARCH("Red",A2,1))