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

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

есть колонка с полным ФИО (Иванов Иван Иванович) , как сделать сокращение до Иванов И.И. ?
Колонка одна, разделять нельзя
  • Вопрос задан
  • 548 просмотров
Решения вопроса 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, могу позже сделать как время будет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы