Solución simple y efectiva adaptada a tu escenario, mediante la clase TextFieldParser para parsear la cadena de texto en formato CSV:
Código (vbnet) [Seleccionar]
Dim dt As New DataTable("csv")
dt.Columns.Add("nombre")
dt.Columns.Add("apellido")
dt.Columns.Add("edad")
dt.Columns.Add("estado civil")
Using csvText As New StringReader(Me.RichTextBox1.Text),
csvReader As New TextFieldParser(csvText) With {
.Delimiters = {"|"c},
.HasFieldsEnclosedInQuotes = False,
.TextFieldType = FieldType.Delimited
}
Do Until csvReader.EndOfData
Try
Dim fields As String() = csvReader.ReadFields()
dt.Rows.Add(fields)
Catch ex As MalformedLineException
Throw
End Try
Loop
End Using
Me.DataGridView1.DataSource = dt