Разделение ячеек по регистру

У Manik есть рабочий лист, который в столбце A содержит текстовые значения в формате «mikeDAVIS», где имя человека записано в нижнем регистре, а фамилия – в верхнем регистре. Он хотел бы разделить имена на два отдельных столбца в соответствии с регистром текста.

Это можно сделать с помощью формулы или макроса. Независимо от того, какой подход вы используете, главное – выяснить, где текст переключается с нижнего на верхний регистр. Это можно сделать, только изучив каждый символ в строке. Итак, если вы хотите использовать шаблонный подход, вам нужно будет использовать формулу массива. Следующая формула массива возвращает фамилию того, что находится в ячейке A1:

 = MID (A1, MATCH (1, (CODE (MID (A1, ROW ($ 1: 255), 1))  > = 65) * (CODE (MID (A1, ROW ($ 2: 255), 1))  

Помните, поскольку это формула массива, вам следует введите его, нажав Ctrl + Shift + Enter . Он возвращает все, что есть в ячейке, начиная с первой найденной заглавной буквы. Таким образом, в «mikeDAVIS» он вернет «DAVIS», а в «mikeDavis» он вернет «Davis». Предполагая, что вы используете формулу массива в ячейке B1, вы можете определить имя, используя следующее:

 = SUBSTITUTE (A1, B1, "") 

Это обычная формула, а не формула массива.

Есть много похожих формул массива, которые могут выполнять почти ту же задачу. Например, эта формула массива вернет первое имя (все символы до первого прописного символа) всего, что находится в ячейке A1:

 = LEFT (A1, MAX ((CODE (MID (  A $ 1, ROW (INDIRECT ("1:" & LEN (A1))), 1))> 96) * ROW (INDIRECT ("1:" & LEN (A1))))) 

Затем вы можете использовать ту же обычную формулу (ту, которая использует функцию ПОДСТАВИТЬ) для получения фамилии.

Если вы хотите использовать макро-подход для поиска имен, все, что вам нужно сделать придумали формулу, которая вернет расположение первой заглавной буквы в тексте. Следующий код возвращает эту «точку изменения» в тексте:

 Функция GetFirstUpper (MyCell As Range) As Integer Dim sCellValue As String Dim i As Integer sCellValue = Trim (MyCell.Value) i = 1  Выполнить while (Asc (Mid (sCellValue, i, 1))> 90 _ Or Asc (Mid (sCellValue, i, 1))  

Чтобы использовать функцию, предположим, что имя находится в ячейке A1. Вы можете найти имя и фамилию, используя следующие формулы на своем листе:

 = LEFT (A1, GetFirstUpper (A1) -1) = MID (A1, GetFirstUpper (A1), LEN (TRIM (  A1)) - GetFirstUpper (A1) +1) 

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

 Функция GetFirstName (MyCell As Range) As String Dim sCellValue As String Dim i As Integer sCellValue = Trim (MyCell. Value) i = 1 Do While (Asc (Mid (sCellValue, i, 1))> 90 _ Or Asc (Mid (sCellValue, i, 1))  

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

 = GetFirstName (A1) 

Небольшое изменение макроса позволит вам аналогичным образом выберите фамилию, которая, как предполагается, начинается с первой встреченной заглавной буквы.

 Функция GetLastName (MyCell As Range) As String Dim sCellValue As String Dim i As Integer sCellValue = Trim (MyCell  .Value) i = 1 Do While (Asc (Mid (sCellValue, i, 1))> 90 _ Or Asc (Mid (sCellValue, i, 1))  

Если хотите, вы можете объединить макросы в одну функцию, которая в зависимости от того, что вы укажете, будет возвращать либо имя, либо фамилию:

 Функция GetName (MyCell As Range, sWanted As String) As String Dim sCellValue As String Dim i As Integer sCellValue = Trim (MyCell.Value) i = 1 Do While (Asc (Mid (sCellValue,  i, 1))> 90 _ Или Asc (Mid (sCellValue, i,  1))  

Чтобы использовать эту комбинированную функцию, вам просто нужно указать, какое имя вы хотите:

 = GetName (A1, "First") 

Слово «Первый», переданное таким образом в качестве параметра, возвращает имя (все, что находится до первой заглавной буквы). Любая другая строка, переданная в качестве второго параметра (например, «Last», «xxx», «Rest» или даже «»), приводит к возврату фамилии.

Оцените статью
Frestage.ru
Добавить комментарий