Как определить и удалить одну букву из строки в ячейке? - PullRequest
1 голос
/ 20 июня 2020

У меня есть набор имен в столбце Excel. Однако только некоторые, но не все имена имеют букву в конце (например, John Doe A, Kai Jin, Johnny Desplat Lang B и др. c).

Кто-нибудь может придумать способ убрать букву с конца имени из каждой строки, если она есть? Таким образом, используя приведенный выше пример, у меня останутся: Джон Доу, Кай Джин, Джонни Десплат Ланг и т. Д. c.

Я хорошо знаком с VBA и Excel и готов попробовать что угодно вообще.

Спасибо за помощь с этим вопросом! Заранее извиняюсь, если это кажется элементарным вопросом, но я не знаю, как начать его решать.

Ответы [ 2 ]

4 голосов
/ 20 июня 2020

«Я достаточно хорошо знаком с VBA и Excel и готов попробовать что угодно».

Если да, то это можно сделать с помощью простая формула, если вы используете sh, чтобы избежать VBA. С вашим значением в A1:

=IF(MID(A1,LEN(A1)-1,1)=" ",LEFT(A1,LEN(A1)-2),A1)

Если вам необходимо использовать VBA, я думаю, вам пригодится оператор Like:

Sub Test()

Dim arr As Variant: arr = Array("John Doe A", "Kai Jin", "Johnny Desplat Lang B")

For Each el In arr
    If el Like "* ?" Then 'Or "* [A-Z]" if you must check for uppercase alpha.
        Debug.Print Left(el, Len(el) - 2)
    Else
        Debug.Print el
    End If
Next

End Sub

введите описание изображения здесь

1 голос
/ 21 июня 2020

Просто для удовольствия и для демонстрации другого подхода с помощью функции Filter():

Function ShortenName(ByVal FullName As Variant) As String
'Purpose: remove a single last letter
    Dim n: n = Split(FullName, " "): n = Len(n(UBound(n)))
    ShortenName = Left(FullName, Len(FullName) + 2 * (n = 1))
End Function

Пояснение

Применение функции Split() к полное имя и выделение токена фамилии (через UBound()) позволяет проверить длину одной буквы (переменная n).

Результат функции возвращает всю длину строки минус 2 (последняя буква плюс предыдущая пробел) в случае единственной буквы (условие n = 1 тогда приводит к True равному -1). - В качестве альтернативы можно было ввести: ShortenName = Left(FullName, Len(FullName) - IIf(n = 1, 2, 0))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...