mrusklon
@mrusklon
Не получается? Яростно гугли!

Как в VBA excel получить ФИО из полного текста?

есть колонка с полным ФИО (Иванов Иван Иванович) , как сделать сокращение до Иванов И.И. ?
Колонка одна, разделять нельзя
  • Вопрос задан
  • 480 просмотров
Решения вопроса 2
ProgrammerForever
@ProgrammerForever Куратор тега Excel
Учитель, автоэлектрик, программист, музыкант
С помощью регулярок (надо подключить библиотеку к проекту, чтобы работало):
Tools – References…
☑ Microsoft VBScript Regular Expression
Код:
Public Function getShortName(strText As Variant) As String
    Dim myRegExp As New RegExp
    Dim matches As MatchCollection

    myRegExp.Global = True
    myRegExp.IgnoreCase = True
    myRegExp.Pattern = "(\S+)\s+(\S)\S*\s+(\S)\S*"
    Set matches = myRegExp.Execute(strText)
    
    getShortName = matches(0).SubMatches(0) & " " & matches(0).SubMatches(1) & "." & matches(0).SubMatches(2) & "."
End Function

Можно через Split(), даже покороче получится код, хотя на двойных пробелах споткнётся.
Function getShortName(strText As String) As String
    Dim a
    a = Split(strText, " ")    
    getShortName = a(0) & " " & Left(a(1), 1) & "." & Left(a(2), 1) & "."
End Function

А можно вообще формулой сделать - отталкивайтесь от поиска текста(пробелов)
Ответ написан
Комментировать
idShura
@idShura
Можно формулой

=СЦЕПИТЬ(ЛЕВСИМВ(A1; ПОИСК(" ";A1;1)-1);" ";ЛЕВСИМВ(ПСТР(A1; ПОИСК(" ";A1) + 1; ПОИСК(" ";A1;ПОИСК(" ";A1)+1) - ПОИСК(" ";A1) - 1);1);".";ЛЕВСИМВ(ПРАВСИМВ(A1;ДЛСТР(A1) - ПОИСК(" "; A1; ПОИСК(" "; A1) + 1));1);".")


Но лучше написать вою формулу на vba, могу позже сделать как время будет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы