Согласованность структуры имеет решающее значение при манипулировании строками. Предполагая, что всегда будет 3 и только 3 части для каждого имени, а 3-я часть - отчество / инициал и после запятой нет пробелов, рассмотрим:
LastFirst: Left([Employee], InStrRev([Employee]," ")-1)
Last: Left([Employee], InStr([Employee],",")-1)
First: Mid(Left([Employee], InstrRev([Employee]," ")-1), Instr([Employee],",")+1)
Middle: Mid([Employee], InStrRev([Employee], " ")+1)
Если какое-либо из предположений не выполняется, то создайте пользовательскую функцию VBA. Например, чтобы разрешить отсутствие среднего инициала / имени:
Function GetNamePart(strPart As String, strName As String) As Variant
Select Case StrPart
Case "Last"
GetNamePart = Left(strName, InStr(strName,",")-1)
Case "First"
If InStrRev(strName, " ") > 0 Then
GetNamePart = Mid(Left([Employee], InstrRev([Employee]," ")-1), Instr([Employee],",")+1)
Else
GetNamePart = Mid(strName, InStr(strName, ",")+1)
End If
Case "Middle"
If InStrRev(strName, " ") > 0 Then
GetNamePart = Mid([Employee], InStrRev([Employee], " ")+1)
Else
GetNamePart = Null
End If
End Select
End Function
Вызовите эту функцию из запроса или текстового поля, например: GetNamePart("Last",[Employee])
Чем больше отклонений от предположений, тем сложнее код. Достаточно вариаций, и это может стать практически невозможным для автоматизации.
Существует более одного способа структурировать этот код. Может быть полезен объект Array или Collection.