Радживу нужна формула, которая будет извлекать первые буквы ряда слов. Например, если ячейка содержит текст «Раджив Кумар Панди», он хотел бы извлечь в другую ячейку буквы «РКП».

Количество слов в серии может варьироваться от ячейки к ячейке.

Есть несколько способов подойти к этой задаче. Для начала предполагается, что вы не хотите изменять структуру своего рабочего листа, добавляя промежуточные столбцы. Это предположение также исключает использование функции Text to Columns для разделения исходной строки на отдельные слова.

Ключ к проблеме — убедиться, что ваша формула может определять, где находятся пробелы в исходной строке. Вы можете подумать, что формула, подобная следующей, сработает:

=LEFT(A1,1)&MID(A1,FIND(" ",A1,1)+1,1)&MID(A1, FIND(" ",A1,FIND(" ",A1,1)+1)+1,1)

Эта формула работает частично. Он отлично работает, если в исходной строке есть два пробела, разделяющие три слова. Если слов меньше, формула возвращает ошибку. Если есть еще слова, он возвращает только первые буквы первых трех слов (игнорирует все, что находится после третьего слова).

Это означает, что формула должна не только проверять наличие пробелов, но и обрабатывать ошибки, если пробелов нет или если их слишком мало. Проверка ошибок означает, что формула становится намного длиннее:

=IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), IF(ISERR(LEFT(A1,1)),"",LEFT(A1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)&MID(A1,SEARCH(" ",A1, SEARCH(" ",A1)+1)+1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1))

Эта формула будет правильно обрабатывать все от 0 до 4 слов в строке. Также предполагается, что строка не начинается и не заканчивается пробелом и не содержит нескольких пробелов между словами. Если вы хотите обработать большее количество слов или другие возможные сложности (например, количество пробелов между словами), то лучше всего использовать пользовательскую функцию.

Существует множество способов, которыми пользовательская функция может извлекать ведущие символы из слов строки. Фактически, я получил довольно много вариантов, которые достигают того же самого. Однако следующий пример является, пожалуй, самым кратким кодом, который я встречал:

Function Initials1(Raw As String) As String     Dim Temp As Variant     Dim J As Integer

Application.Volatile     Temp = Split(Trim(Raw))



For J = 0 To UBound(Temp)

Initials1 = Initials1 & Left(Temp(J), 1)

Next J End Function

Этот код будет работать в любой версии VBA, начиная с Excel 2000. Функция Split «разрывает» строку в зависимости от того, где в ней встречаются пробелы. Отдельные слова в строке помещаются в массив (в данном случае Temp), откуда вы можете получить доступ к отдельным словам. Чтобы использовать функцию на рабочем листе, просто используйте что-то вроде этого:

=Initials1(A1)

Если вы используете версию Excel, которая не поддерживает функцию разделения, то следующий код также будет работать нормально:

Function Initials2(Raw As String)

Dim p As Integer

Application.Volatile     Initials2 = ""

p = 0     Do         Initials2 = Trim(Initials2) & Mid(Raw, p + 1, 1)

p = InStr(p + 1, Raw, " ")

Loop Until p = 0 End Function

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (8661) относится к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Pulling_Initial_Letters_from_a_String [Получение начальных букв из строки].