Как сделать фамилию и инициалы в excel?

Office 365, AD, Active Directory, Sharepoint, C#, Powershell. Технические статьи и заметки.

Excel: выделение имени, отчества, инициалов из ФИО

Будем использовать формулы с текстовыми функциями.
Будем предполагать, что исходные данные (ФИО) содержатся в ячейке A1«Иванов Сергей Олегович».

1. Выделение фамилии из ФИО

Формула извлечения фамилии (в ячейке B1):

2. Выделение Имени Отчества из ФИО

Формула извлечения Имени Отчества (в ячейке C1):

3. Выделение инициалов (И.О.) из ФИО

Формула извлечения И.О. (в ячейке D1):

4. Выделение фамилии и инициалов из ФИО

Формула извлечения в виде Фамилия И.О. (в ячейке E1):

5. Выделение имени из ФИО

Формула извлечения имени из ФИО (в ячейке F1):

6. Выделение отчества из ФИО

Формула извлечения отчества из ФИО (в ячейке G1):

17 комментариев :

Косяк какой то в формуле вычленения «имени» из «Фамилии Имени Отчестве». При постановке формулы к примеру Абрамов Дмитрий Геннадьевич имя выводит как «Дмитрий Ген», приходится менять последнее число формулы с «-1» на «-3», но ввиду большого количества имен разной длины приходится в некоторых ячейках в ручную это править. Подправьте пожалуйста, что бы было автоматически. Заранее благодарен!

Этот комментарий был удален автором.

Огромное Спасибо! Всё хорошо, кроме последней формулы: вытянуть отчество из «Александр Иванович» не получается, а выходит «др Иванович». С другими именами и отчествами (какие у меня есть) получилось.

Пожалуйста. А в ячейке «Александр Иванович» случайно нет лишнего пробела в начале фразы? Из-за этого может быть ошибка.

Исправление к последней формуле — =ПРАВСИМВ(C1;ДЛСТР(C1)-ПОИСК(» *»;C1))

Подскажите, пожалуйста, для русских ФИО и т.п. все понятно, а вот если Киргиз, у неких есть фамилия типу Иванов Уулу, а имя Аданбек, отчество может быть, может не быть. Можно ли как-то под них тоже автоматизировать процесс?

А как система должна понять, что в строке «Иванов Уулу Аданбек» — Уулу — это не имя, а Аданбек — не отчество? В таком случае нужен дополнительный параметр, который будет указывать, что в данном случае надо менять правила обработки строки. Например, добавить еще колонку, которая будет задавать «признак отличия ФИО» (может гражданство или еще как-то), а затем в формуле добавить условие, допустим, если признак «не РФ», то рассчитывать по другой формуле. Иначе никак. Когда разрабатываю какую-либо систему, всегда задаю хранение отдельно имени, отдельно отчества, отдельно фамилии, чтобы не было таких проблем. Формулами из данной статьи приходится пользоваться, если кто-то прислал списки, где ФИО в одной строке, тогда и сложности.

EXCEL для чайников.3.текст

Доброго времени суток, пикабушнички! Предлагаю продолжить работу по осёдлыванию могучего скакуна, по кличке Excel. Это мой третий пост. В предыдущих мы говорили о функциях времени https://pikabu.ru/story/excel_dlya_chaynikov2vremya_5352893 и ВПР https://pikabu.ru/story/excel_dlya_chaynikov1vpr_5337342 , этот же пост будет про работу с текстом. Некоторые сейчас подумают: «Что? Зачем работать с текстом в экселе, если есть ворд?» или даже «Ворд — для текста, ексель — для таблиц!». Однако, глупо отрицать, что бывают такие ситуации, когда текст нужен в таблице. И, выбирая между работой с таблицей в ворде и работой с текстом в екселе, вы вряд ли выберете первое. А если выберете… храни вас Бог.

Итак, сегодня мы поговорим про обработку текста в таблицах. Сразу отмечу, что у некоторых функций работы с текстом имеется дублер для работы с иероглифами, например функция ДЛСТР имеет восточного дублера ДЛИНБ. Однако, за неимением у автора достаточных знаний о соответствующих иностранных языках, рассматривать работу с иероглифами не будем.

Вот краткий перечень основных функций по работе с текстом (если ты не любишь подобное занудство — мотай до таблицы):

ДЛСТР(текст) – выдает длину строки (количество символов)

ЛЕВСИМВ(текст, [число_знаков]) – «отрубаем» нужное количество знаков слева

ПРАВСИМВ(текст,[число_знаков]) – «отрубаем» нужное количество знаков справа

ПСТР(текст, нач_позиция, число_знаков) – «вырубаем» нужное слово или несколько из текстовой ячейки

ПРОПИСН(текст) — ДЕЛАЕТ ВЕСЬ ТЕКСТ ПРОПИСНЫМ (для любителей КАПСА!)

ПРОПНАЧ(текст) — Делает Первые Буквы Слов Прописными

СТРОЧН(текст) – все буковки маленькие

ЗНАЧЕН(текст)- преобразует текст в числовое значение (полезно если откуда-то достались числа, сохраненные как текст, с которыми нельзя совершать математические действия)

ТЕКСТ(значение, формат) преобразует значение ячейки в текст нужного нам формата

СЖПРОБЕЛЫ(текст)- удаляет «ненужные» пробелы

ПЕЧСИМВ(текст)- убирает непечатные символы

КОДСИМВ(текст)- показывает код символа ANSI если это вам о чем то говорит (если символов несколько то код первого символа)

СИМВОЛ(число) пишет символ по его коду (это как КОДСИМВ наоборот)

ПОВТОР(текст, число_повторений) – повторяет текст нужное количество раз

СЦЕПИТЬ(текст1, [текст2], . ) сцепляет несколько текстовых ячеек в одну (вместо этой функции я предпочитаю использовать символ &, который аналогичен ей)

НАЙТИ(искомый_текст, просматриваемый_текст, [нач_позиция])ищем определенный текст в ячейках, результатом будет порядковый номер первого символа исходного текста (ниже будут примеры)

ПОИСК(искомый_текст, просматриваемый_текст,[нач_позиция])то же что и НАЙТИ но без учета регистра

ЗАМЕНИТЬ(стар_текст, нач_позиция, число_знаков, нов_текст) заменяет кусочек текста ячейки на другой

ПОДСТАВИТЬ(текст, стар_текст, нов_текст, [номер_вхождения]) заменяет одну часть текста на другую в нужном «вхождении» (терпение, примеры ниже)

СОВПАД(текст1, текст2) – сравнивает две ячейки на предмет их тождественности

T(значение)- если эта функция ссылается на текст, то возвращает его, если нет, то возвращает пустое место

РУБЛЬ(число, [число_знаков]) переводит число в денежный формат (с нужным округлением)

ФИКСИРОВАННЫЙ(число, [число_знаков], [без_разделителей]) – округляем число и преобразовываем его в текст (разделители это такие пробелы между тысячами, миллионами и т.д., чтобы число лучше читалось.

Пример работы всех описанных функций:

Комментарии к таблице в общем-то излишни, думаю все вполне наглядно. Поясню пару моментов:

1. Округление в функциях РУБЛЬ и ФИКСИРОВАННЫЙ я нарочно делал отрицательным, чтобы показать, что так можно, в этом случае округление идет до десятков (-1), сотен(-2), и т.д. Этот прием работает и с обычными округлениями ОКРУГЛ, ОКРУГЛВВЕРХ, ОКРУГЛВНИЗ при разложении числа на десятки, сотни и т.д.

2. Число в ячейке В3 сохранено как текст, поэтому с ним нельзя будет выполнять каких либо арифметических действий пока мы не переведем его в значение, по сути функции ЗНАЧЕН(), РУБЛЬ() и ФИКСИРОВАННЫЙ() делают одно и тоже, только две последних меняют еще и формат ячейки.

Читать еще:  Как сделать строку итого в excel 2010?

Подробнее о форматах расскажу в следующий раз.

А здесь хотелось бы рассмотреть небольшой пример для закрепления. Чтобы не нагромождать множество функций в примере рассмотрим несколько из них. Допустим у нас есть ячейки с ФИО, нам нужно разделить фамилии, имена и отчества в разных ячейках. Затем соединим фамилию и инициалы имени отчества сокращенно, а в последней ячейке проверим, действительно ли у нас написана фамилия.

теперь посмотрим какие формулы прописаны у нас в столбцах В-Н:

столбец В: =ДЛСТР(A3) – находим длину текстовой ячейки в столбце А;

столбец С: =ПОИСК(» «;A3;1) – ищем первый пробел, начиная с первого символа;

столбец D: =ПОИСК(» «;A3;C3+1) – ищем второй пробел, начиная со следующего символа после первого пробела, найденного ранее;

столбец Е: =ЛЕВСИМВ(A3;C3-1) – отрезаем фамилию, отрезая заодно один символ пробела;

столбец F: =ПСТР(A3;C3+1;D3-C3) – вырезаем имя из середины, от первого пробела на длину имени, равную разности позиций первого и второго пробела;

столбец G: =ПРАВСИМВ(A3;B3-D3) – отрезаем отчество, длина которого равняется разности позиции второго пробела и общей длинны текстовой ячейки;

столбец Н: =СЦЕПИТЬ(E3;» «;ЛЕВСИМВ(F3;1);».»;ЛЕВСИМВ(G3;1);».») – набираем фамилию и первые буквы имени и отчества, разделяя их пробелом и точками;

столбец I: =ЕСЛИ(СОВПАД(E3;ПРОПНАЧ(E3));»ДА»;»НЕТ») – проверяем совпадают ли значения ячейки с фамилией и такой же ячейки проведенной через функцию ПРОПНАЧ, которая делает заглавной первую букву, иными словами проверяем является ли в ячейке с фамилией первая буква заглавная а остальные строчные. Если является, то пишем «ДА»; если нет то «НЕТ».

На этом пока все, буду фантазировать над темой следующего поста…

EXCEL для чайников.3.текст

Доброго времени суток, пикабушнички! Предлагаю продолжить работу по осёдлыванию могучего скакуна, по кличке Excel. Это мой третий пост. В предыдущих мы говорили о функциях времени https://pikabu.ru/story/excel_dlya_chaynikov2vremya_5352893 и ВПР https://pikabu.ru/story/excel_dlya_chaynikov1vpr_5337342 , этот же пост будет про работу с текстом. Некоторые сейчас подумают: «Что? Зачем работать с текстом в экселе, если есть ворд?» или даже «Ворд — для текста, ексель — для таблиц!». Однако, глупо отрицать, что бывают такие ситуации, когда текст нужен в таблице. И, выбирая между работой с таблицей в ворде и работой с текстом в екселе, вы вряд ли выберете первое. А если выберете… храни вас Бог.

Итак, сегодня мы поговорим про обработку текста в таблицах. Сразу отмечу, что у некоторых функций работы с текстом имеется дублер для работы с иероглифами, например функция ДЛСТР имеет восточного дублера ДЛИНБ. Однако, за неимением у автора достаточных знаний о соответствующих иностранных языках, рассматривать работу с иероглифами не будем.

Вот краткий перечень основных функций по работе с текстом (если ты не любишь подобное занудство — мотай до таблицы):

ДЛСТР(текст) – выдает длину строки (количество символов)

ЛЕВСИМВ(текст, [число_знаков]) – «отрубаем» нужное количество знаков слева

ПРАВСИМВ(текст,[число_знаков]) – «отрубаем» нужное количество знаков справа

ПСТР(текст, нач_позиция, число_знаков) – «вырубаем» нужное слово или несколько из текстовой ячейки

ПРОПИСН(текст) — ДЕЛАЕТ ВЕСЬ ТЕКСТ ПРОПИСНЫМ (для любителей КАПСА!)

ПРОПНАЧ(текст) — Делает Первые Буквы Слов Прописными

СТРОЧН(текст) – все буковки маленькие

ЗНАЧЕН(текст)- преобразует текст в числовое значение (полезно если откуда-то достались числа, сохраненные как текст, с которыми нельзя совершать математические действия)

ТЕКСТ(значение, формат) преобразует значение ячейки в текст нужного нам формата

СЖПРОБЕЛЫ(текст)- удаляет «ненужные» пробелы

ПЕЧСИМВ(текст)- убирает непечатные символы

КОДСИМВ(текст)- показывает код символа ANSI если это вам о чем то говорит (если символов несколько то код первого символа)

СИМВОЛ(число) пишет символ по его коду (это как КОДСИМВ наоборот)

ПОВТОР(текст, число_повторений) – повторяет текст нужное количество раз

СЦЕПИТЬ(текст1, [текст2], . ) сцепляет несколько текстовых ячеек в одну (вместо этой функции я предпочитаю использовать символ &, который аналогичен ей)

НАЙТИ(искомый_текст, просматриваемый_текст, [нач_позиция])ищем определенный текст в ячейках, результатом будет порядковый номер первого символа исходного текста (ниже будут примеры)

ПОИСК(искомый_текст, просматриваемый_текст,[нач_позиция])то же что и НАЙТИ но без учета регистра

ЗАМЕНИТЬ(стар_текст, нач_позиция, число_знаков, нов_текст) заменяет кусочек текста ячейки на другой

ПОДСТАВИТЬ(текст, стар_текст, нов_текст, [номер_вхождения]) заменяет одну часть текста на другую в нужном «вхождении» (терпение, примеры ниже)

СОВПАД(текст1, текст2) – сравнивает две ячейки на предмет их тождественности

T(значение)- если эта функция ссылается на текст, то возвращает его, если нет, то возвращает пустое место

РУБЛЬ(число, [число_знаков]) переводит число в денежный формат (с нужным округлением)

ФИКСИРОВАННЫЙ(число, [число_знаков], [без_разделителей]) – округляем число и преобразовываем его в текст (разделители это такие пробелы между тысячами, миллионами и т.д., чтобы число лучше читалось.

Пример работы всех описанных функций:

Комментарии к таблице в общем-то излишни, думаю все вполне наглядно. Поясню пару моментов:

1. Округление в функциях РУБЛЬ и ФИКСИРОВАННЫЙ я нарочно делал отрицательным, чтобы показать, что так можно, в этом случае округление идет до десятков (-1), сотен(-2), и т.д. Этот прием работает и с обычными округлениями ОКРУГЛ, ОКРУГЛВВЕРХ, ОКРУГЛВНИЗ при разложении числа на десятки, сотни и т.д.

2. Число в ячейке В3 сохранено как текст, поэтому с ним нельзя будет выполнять каких либо арифметических действий пока мы не переведем его в значение, по сути функции ЗНАЧЕН(), РУБЛЬ() и ФИКСИРОВАННЫЙ() делают одно и тоже, только две последних меняют еще и формат ячейки.

Подробнее о форматах расскажу в следующий раз.

А здесь хотелось бы рассмотреть небольшой пример для закрепления. Чтобы не нагромождать множество функций в примере рассмотрим несколько из них. Допустим у нас есть ячейки с ФИО, нам нужно разделить фамилии, имена и отчества в разных ячейках. Затем соединим фамилию и инициалы имени отчества сокращенно, а в последней ячейке проверим, действительно ли у нас написана фамилия.

теперь посмотрим какие формулы прописаны у нас в столбцах В-Н:

столбец В: =ДЛСТР(A3) – находим длину текстовой ячейки в столбце А;

столбец С: =ПОИСК(» «;A3;1) – ищем первый пробел, начиная с первого символа;

Читать еще:  Как сделать выпадающий список с условием в excel?

столбец D: =ПОИСК(» «;A3;C3+1) – ищем второй пробел, начиная со следующего символа после первого пробела, найденного ранее;

столбец Е: =ЛЕВСИМВ(A3;C3-1) – отрезаем фамилию, отрезая заодно один символ пробела;

столбец F: =ПСТР(A3;C3+1;D3-C3) – вырезаем имя из середины, от первого пробела на длину имени, равную разности позиций первого и второго пробела;

столбец G: =ПРАВСИМВ(A3;B3-D3) – отрезаем отчество, длина которого равняется разности позиции второго пробела и общей длинны текстовой ячейки;

столбец Н: =СЦЕПИТЬ(E3;» «;ЛЕВСИМВ(F3;1);».»;ЛЕВСИМВ(G3;1);».») – набираем фамилию и первые буквы имени и отчества, разделяя их пробелом и точками;

столбец I: =ЕСЛИ(СОВПАД(E3;ПРОПНАЧ(E3));»ДА»;»НЕТ») – проверяем совпадают ли значения ячейки с фамилией и такой же ячейки проведенной через функцию ПРОПНАЧ, которая делает заглавной первую букву, иными словами проверяем является ли в ячейке с фамилией первая буква заглавная а остальные строчные. Если является, то пишем «ДА»; если нет то «НЕТ».

На этом пока все, буду фантазировать над темой следующего поста…

Как сделать фамилию и инициалы в excel?

Ребята, есть ли возможность в Ворде, либо в Экселе (скорее всего в VBA) конвертировать строку н.п. «Иванов Петр Васильевич» в «Иванов П.В.».
И еще, есть ли возможность сделать вышеизложенное при условии, что перед полным ФИО стоит, к примеру фраза «Студент ВУЗа», а после него, стоит, «который учится на отлично», т.е. конвертируемый текст обрамлен с обоих сторон доп. текстом.
И вообще, есть ли возможность поменять падеж в зависимости от фамилии (пола) «который/которая»?

Добавление от 06.02.2006 23:31:

Параллельно назрел вопрос — как (наверное по той же схеме) со строки о периоде действия «С 09.02.06 по 12.02.07» извлечь сами даты? Какими методами?
Или, к примеру, если стоит «1 год», то как разделить эту единицу (для того, чтобы потом переконверовать ее в 365 дней) и слово «год» для дальнейших мат. калькуляций?

Если можно, то приведите, пожалуйста, примеры.

Спасибо всем помогающим!

Добавление от 06.02.2006 23:54:

И еще, чтобы уже сразу все спросить
как можно сделать так, чтобы в определенную ячейку выводилось значение «есть», если отвечающее другой ячейке значение присутствует в третьей? Во нагородил

Если объяснить на примере, то
есть у нас набор машин
A B
1 Жигули
2 Opel
3 Bugatti

В ячейку X1, предположим, я занес значение «2, 3» (через запятую с пробелом или без), так вот можно ли вывести в ячейки C1, C2, C3 (отвечающие этим машинам) соответственно слова «есть» в случае если в ячейку X1 существует номер соответствующей марки и «нет» в противном случае?

fz-mix, способо то мне понятен, но сами методы реализации нет. Если бы бы это было на C++ или на Delphi, то я бы что-то сам сделал, а так.
Можно ли примерчики?

По 1-ому понятно, но вместо «Студент ВУЗа» может стоять и «Работник цеха», либо вообще какая-то другая профессия.
По 2-ому непонятно. Мне бы просто выделить эти даты и занести каждую в соотв. ячейку. Но опять же — какими ф-иями VBA?

3-й вар-т не устраивает, у меня сложная структура, и TextToColumns не поможет. Нужно анализировать в VBA и потом, избавляясь от лишего (запятые, пробелы), вносить все куда надо ))

>И еще, есть ли возможность сделать вышеизложенное при условии, что перед полным ФИО стоит, к примеру фраза «Студент ВУЗа», а после него, стоит, «который учится на отлично», т.е. конвертируемый текст обрамлен с обоих сторон доп. текстом.

Определи что такое «фраза перед полным ФИО» и вперед. Если никак — ищи сочетание «слово» + ‘.’ +’.’ функцией POS, если расстояние между точками и словом 203 символа — значит это Фимилия И.О.

>И вообще, есть ли возможность поменять падеж в зависимости от фамилии (пола) «который/которая»?
Скорее всего только по отдельному справочнику, вести его отдельно, если это все работа разовая — не имеет смысла.

Дата из текста берется при помощи CDate(), а искать ее опять же по шаблону — ##.##.## либо ##.##.#### в строке, используя pos(), mid() и т.п.
Про один год ничего не понял, в приведенном примере все и так понятно, чего там разделять, в каком контексте это используется ?

>предположим, я занес значение «2, 3»
>3-й вар-т не устраивает, у меня сложная структура
«Предположим» или все таки «сложная структура» ? Если второе — почему мы ее тут не видим ?
А еще автору такой «структуры» нужно йаду однозначно. Автору «2, 3, . » тоже.

SuperMaximus
Если бы бы это было на C++ или на Delphi, то я бы что-то сам сделал

Это отмазка Если придумаешь четкий алгоритм, его уже все равно на чем реализовать. А у тебя пока с формализацией проблемы. Например, вот это:
вместо «Студент ВУЗа» может стоять и «Работник цеха», либо вообще какая-то другая профессия
Так как программа должна найти фамилию? Третье слово в строке? Или первое слово в строке, у которого первая буква заглавная, а остальные — нет?

Если бы я выдумывал структуры обсуждаемого док-та, то тут бы вопросов попросту не было
Нужно как-то выкручиваться из положения.

Обьясню конкретней в чем проблема — есть ячейка (одна), в которую юзер вводит данные в формате «В.о. Директора корпорации Microsoft Билл Гейтс, который действует на основании Устава», так вот юзер может быть не обязательно Б.Гейтсом и не обязательно ген.дир-ом, и действовать он может на основании какого-то приказа вообще, или по лицензии.
Разумеется, проще всего было бы заставить пользователя вводить данные о должности, имени, и док-та на осн. которого он действует в 3 разных ячейки, но это уже наглость.

>Определи что такое «фраза перед полным ФИО» и вперед. Если никак — ищи сочетание «слово» + ‘.’ >+’.’ функцией POS, если расстояние между точками и словом 203 символа — значит это Фимилия И.О.
Попробую. А что если заставить юзера вводить эти данные через 2 пробела, т.е. ген. директор [2 пробела] (имя) [2 пробела] и т.д.? Вообще как в таком сл-е реализовать обнаружение этих 2-х пробелов и , следовательно, разделить данные на 3 разных ячейки (будут использоваться в соседнем листе для слияния в ворде).

Читать еще:  Связать таблицы в excel как сделать

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

>А еще автору такой «структуры» нужно йаду однозначно. Автору «2, 3, . » тоже.
Хорошо, как тогда реализовать возможность, к примеру, определения принадлежности товара к определенной опер.точке? Есть 14 точек, в поле принадлежности к точкам я вбиваю «1,3-8»? Это означает, что товар принадлежит к 1,3,4,5,6,7,8 точкам? Ввести новую колонку напротив товара я не могу, нет у меня прав на изменение структуры утвержденного документа.

>Это отмазка Если придумаешь четкий алгоритм, его уже все равно на чем реализовать.
Нет, не отмазка. Если бы я хорошо знал синтаксис VBA и то для чего предназначена каждая ф-ия, то за помощью не обращался бы. А алгоритмы реализации подобных задач на Delphi, C++ и VBA разные по той простой причине, что языки это разные, имею разные возможности и ф-ии. Одно дело — придумать алгоритм на бумаге, изобразив на блок-схеме, а другое — реализовать на ПК. На ПК больше ограничений

>Так как программа должна найти фамилию? Третье слово в строке? Или первое слово в строке, у >которого первая буква заглавная, а остальные — нет?
Формализация проста — разделить должность/профессию человека (которая может состоять из n слов), ФИО и то, на основании чего он действует (тоже может быть что угодно, предопределить что-то конкретное нельзя).
Как я уже написал выше (слово «Директора») — все возможно.
Думаю, что выходом из ситуации будет принудительное введение всех этих элементов через «;» или что-то подобное.

SuperMaximus
Директора корпорации Microsoft
Что мешает Биллу иметь фамилию Майкрософт? Я к тому, что в таком случае наверно лучше иметь «под рукой» список юзверей. Аналогично с должностями. Иначе без ИИ не обойтись, IMHO (в общем случае)

«1,3-8»
В этом случае два раза разделить по колонкам и получить линейную серию для 3-8. Парсер не очень сложный. Больше вариантов ввода нет?

>Нет, не отмазка
Отмазка, отмазка

>алгоритмы реализации подобных задач на Delphi, C++ и VBA разные по той простой причине, что языки это разные, имею разные возможности и ф-ии
Да фиг там, язык программирования — условность. Главное алгоритм. Базовые функции сильно похожи, для твоей задачи нужны instr(), mid() ну может еще парочка из той же серии, все их можно посмотреть в Excel в справке по формуле.

>именно сложная структура
>определения принадлежности товара к определенной опер.точке
Сама идея делать такое в Excel да еще такими методами — бред. Не так давно кажется тут уже обсуждали «Переход с Access на Excel». Сложная структура и плохая структура — разные вещи. Вот для хранения и обработки данных трудно придумать что то хуже чем ты описал.

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

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

Два пробела ищутся ф-цией instr() (хм. а я думал что она pos() называется в vba ). Только по опыту скажу — фиг ты «заставишь» юзеров правильно вводить, у них в ДНК ошибка

SuperMaximus
Набросал парсер. Не оптимизировал, возможны ошибки. Вместо тире использовал «+» . Итак в примере фигурируют три именованных диапазона, точнее их начальных ячеек: Source -куда вводится исходная последовательность, Temp — промежуточный, куда сбрасывается результат от TextToColumns, Dest — результирующая последовательность. Причем они должны быть расставлены так, чтобы ни пересечься, ни соединиться текущими областями (производные от Range(«. «.CurrentRegion) ). Например, A1 — Source, C1 — Temp, A3 — Dest.

PS: Совсем непохожий код — см. ниже (http://forum.ixbt.com/topic.cgi?id=23:30923:10#14)

Блин, у меня теперь опера (6.06) плохо код отображает, налезает вниз

fz-mix
Мегареспект тебе
Кстати, а ты не мог бы мне помочь переделать данный парсер под немножко другую форму записи данных в исх. ячейках?
Дело в том, что у меня есть позиции товаров, скажем 20 штук (в 20 строках записаны), для каждого отведена отдельная строка в таблице, в ней содержится детальная информация о товаре. Хотелось бы добавить информацию из заявки на товар, которая представлена в следующем виде «4,0% — 1, 12% — 2-19, 0,4% — 20» в соответствующие строки, отвечающие товарам по позициям. Проценты — это скидка на товар, после тире идет позиция товара, ну а через запятую перечислены скидки на позиции товаров.
Следовательно, исходя из того, что я написал выше — на товар под позицией 1 будет дана скидка 4,0% , на все товары с позиции 2 по 19 будет скидка в размере 12%, ну а на 20-тый товар будет скидка 0,4%.
Результат вышенаписанного парсера очень даже устраивает. Текст разделяется безошибочно (при тех условиях, что были раньше). Можно ли (подобным образом) реализовать парсер, разделяющий информацию о скидках? Или все же лучше избавиться от стольких тире? Не мешают ли они?
Тут необходимо разбить всю информацию на 2 колонки — в одной должно быть значение скидки, а в другой — позиция товара. Сколько товаров — столько должно быть и строк (для того, чтобы потом добавить новосозданный столбец со скидками в таблицу с товарами).

P.S. Да, еще забыл спросить, а можно ли вместо промежуточного звена «Temp» использовать массив дабы не засорять Экселевскую таблицу? Если да, то как?

Ссылка на основную публикацию
Adblock
detector