Каждый символ вводимого слова в отдельной ячейке |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
- Первое слово ячейки Excel с большой буквы
- Вывести первое слово в отдельную ячейку — формула
- Оставить только первое слово в ячейке
- Взять первые 2/3/N слов ячейки
- Процедуры !SEMTools для извлечения первых N слов
Первое слово (до пробела) в Excel-ячейке часто приковывает внимание тех, кто работает с текстовыми данными. Его часто нужно выделить как отдельную единицу, с которой уже определенным образом оперировать — сделать его с заглавной буквы, выделить в отдельную ячейку, оставить только его в исходной ячейке и т.д.
Помимо первого слова ячейки, бывает также важно взять первое слово после него, и так далее.
Часто после извлечения требуется удалить первые слова из ячеек, но это уже кардинально другое действие, смотрите соответствующую статью.
Сделать первое слово ячейки с большой буквы не очень сложно, если перед ним нет никаких других символов. Но если там кавычки, скобки, тире или еще какая-то пунктуация, решение может быть существенно более сложным, чем просто взять первый символ ячейки и сделать его заглавным.
Поэтому я рассмотрел эту задачу в отдельной статье “Как сделать первую букву ячейки заглавной“.
Вывести первое слово в отдельную ячейку — формула
Если под первым словом понимаются символы строки до первого пробела, то функция довольно проста:
=ЛЕВСИМВ(A1;ПОИСК(" ";A1&" ")-1)
Здесь A1 – ячейка с искомым словом.
Обратили внимание на дополнительный пробел, добавляемый к значению исходной ячейки через амперсанд (&)? Он используется для ситуаций, когда первое слово в ячейке является единственным, или слов в ячейке нет совсем. Если не добавлять этот пробел, функция в таких случаях вернет ошибку.
А ошибки нам тут ни к чему, поэтому рекомендуется использовать формулу выше. Удобство формул в том, что, если их протянуть на весь второй столбец, при изменении данных в первом столбце первые слова будут автоматически вставляться в соседние ячейки.
Оставить только первое слово в ячейке
Простейший вариант сделать подобное в Excel – штатной процедурой “Найти и заменить“. Можно вызвать процедуру горячим сочетанием клавиш Ctrl + H, в первом окошке ввести пробел со звёздочкой (см. подстановочные символы в Excel), а второе оставить пустым как есть.
Есть и вариант с использованием !SEMTools, процедура находится в подразделе ИЗВЛЕЧЬ – Извлечь Слова – по порядку:
Взять первые 2/3/N слов ячейки
Чем больше число слов, которые вы хотите извлечь из ячейки, тем сложнее это будет сделать. В Google Spreadsheets есть замечательная функция SPLIT, с её помощью можно разбить ячейку на отдельные слова и брать каждое из них по его индексу, что делает инструмент идеальным для такой задачи. Но в Excel, к сожалению, подобной функции нет.
Однако, есть альтернативы. Например, чтобы взять первые два слова, один из вариантов формулы будет выглядеть так:
=ЛЕВСИМВ(A1;ПОИСК(ЮНИСИМВ(23456);ПОДСТАВИТЬ(A1&" ";" ";ЮНИСИМВ(23456);2))-1)
Формула использует особенные свойства функций ПОДСТАВИТЬ и ЮНИСИМВ:
- функция ПОДСТАВИТЬ позволяет заменить N-ую подстроку в ячейке на заданное значение
- а ЮНИСИМВ позволяет задать это значение настолько уникальным, насколько возможно, чтобы быть уверенным, что оно будет единственным в ячейке
Далее функция ПОИСК находит позицию этого символа, чтобы функция ЛЕВСИМВ взяла все что до него (из позиции вычитается единица).
Неплохая надёжная формула со своими преимуществами и недостатками.
Преимущество в том, что легко поддаётся модификации под задачу с извлечением 3,4 и далее слов, просто нужно заменить в формуле аргумент функции подставить, который 2, на соответствующее число.
Недостаток – ЮНИСИМВ работает только в Excel 2013 и старше. Вот аналог для более ранних версий, использующий функцию СИМВОЛ:
=ЛЕВСИМВ(A1;ПОИСК(СИМВОЛ(9);ПОДСТАВИТЬ(A1&" ";" ";СИМВОЛ(9);2))-1)
Функция добавляет в строку символ табуляции, также с высокой вероятностью изначально в ней отсутствующий.
Процедуры !SEMTools для извлечения первых N слов
Знание функций и формул Excel очень помогает в работе, для энтузиастов у меня есть целый Справочник функций Excel. Однако тратить время на составление сложных конструкций может быть накладно, равно как и хранить где-то на диске огромный файл с примерами их использования.
Тем, кто ценит время, будут полезны процедуры моей надстройки, среди которых и такая, которая позволяет взять первые N слов во всех выделенных ячейках. И либо вставить в соседний столбец, либо оставить в изначальных ячейках. За режим вывода отвечает маленький флажок в надстройке:
Хотите так же быстро извлекать слова по их позиции в Excel?
!SEMTools поможет с этой и решит многие другие задачи за пару кликов!
JohnJ 108 / 7 / 3 Регистрация: 29.06.2012 Сообщений: 28 |
||||
1 |
||||
Как сделать каждый символ вводимого слова в отдельной ячейке29.06.2012, 08:47. Показов 8961. Ответов 18 Метки нет (Все метки)
Здравствуйте! Пишу макрос для Excel, который позволит вписывать только по одной букве в ячейку, переходя после этого на следующую. Удобно для заполнения форм, в которых каждая буква должна быть в своём квадратике. Может быть можно обойтись проще, чем задумал я?
И это работает при одном интересном условии: макрос должен запускаться только в русской раскладке. Если он запустится в английской раскладке, то после переключения на русский, буквы в ячейки будут вставляться соответствующие английские. И побороть это я пока не смог. Пробовал проверять раскладку клавиатуры с помощью GetKeyboardLayoutName и, если она меняется, переинициализировать слежение за нажатием клавиши. Переинициализация не помогает… Прошу помощи.
0 |
Заблокирован |
|
29.06.2012, 13:46 |
2 |
Удобно для заполнения форм, в которых каждая буква должна быть в своём квадратике. А можно поподробнее — в чем удобство, и как совмещается заполнение полей формы с поячеечным заполнением листа?
0 |
mc-black 2784 / 716 / 106 Регистрация: 04.02.2011 Сообщений: 1,443 |
||||
29.06.2012, 18:18 |
3 |
|||
Во-первых, поправить надо отслеживаемый символ заключить в {}:
В этом случае и при русской раскладке будут печататься… латинские буквы. Но будут. Остается для каждой клавиши определять язык раскладки при помощи GetKeyboardLayoutName и в случае русской раскладки менять латинский символ на русский. Пока ничего красивей не придумал. + нет пока реакции на спецсимволы и цифры. Надо ещё почитать документацию, должно быть красивое и простое решение!
1 |
15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
|
29.06.2012, 18:30 |
4 |
Эм-м… а как это вообще может работать? Тут формируются имена вызываемых подпрограмм в виде Я бы решил задачу так: по двойному клику на ячейке появляется текстбокс, который обычно спрятан. В него вводишь текст. Можно отслеживать нажатие каждой клавиши и обновлять ячейки, а можно только по Enter распределять буквы по ячейкам и прятать текстбокс обратно.
1 |
108 / 7 / 3 Регистрация: 29.06.2012 Сообщений: 28 |
|
29.06.2012, 18:42 [ТС] |
5 |
А можно поподробнее — в чем удобство, и как совмещается заполнение полей формы с поячеечным заполнением листа? Я имел ввиду печатную форму, а не объект «форма»… Т.е. бланк, в котором каждая ячейка в виде квадратика выделена пунктиром и надо ввести печатными буквами фамилию, имя и прочие данные. Часто в различных организациях такое требуется для заполнения бланка и последующего компьютерного сканирования и распознавания указанных данных. Добавлено через 8 минут
Эм-м… а как это вообще может работать? Тут формируются имена вызываемых подпрограмм в виде Я бы решил задачу так: по двойному клику на ячейке появляется текстбокс, который обычно спрятан. В него вводишь текст. Можно отслеживать нажатие каждой клавиши и обновлять ячейки, а можно только по Enter распределять буквы по ячейкам и прятать текстбокс обратно. Возможно это решение, но я с ВБА работаю очень редко и с текстбоксами ещё не работал. Думал можно проще. К тому же, пользователь не должен знать, что нужно сделать двойной клик… По идее вообще ничего сложного: перехватываем нажатие, вставляем символ в ячейку и переходим к следующей. Но сложности возникли именно с тем, что OnKey не распознаёт текущую раскладку, а других способов перехватывать нажатие в ячейке средствами VBA я не знаю. Хотя встречал какую-то API-функцию для установки Hook, но ещё не пробовал… Думается, что это тоже немного уход в дебри…
0 |
призрак 3261 / 889 / 119 Регистрация: 11.05.2012 Сообщений: 1,702 Записей в блоге: 2 |
|
29.06.2012, 20:38 |
6 |
а как это будет работать с многострочными текстами? может быть, такой вариант: Добавлено через 6 минут
пользователь не должен знать, что нужно сделать двойной клик а пользователь будет в состоянии прочитать всплывающее примечание к ячейке с рекомендацией сделать даблклик, а иначе ввод в ячейку запрещен? Добавлено через 1 минуту Добавлено через 12 минут
0 |
1702 / 189 / 19 Регистрация: 20.11.2011 Сообщений: 281 |
|
29.06.2012, 20:43 |
7 |
Сообщение было отмечено как решение Решение
ишу макрос для Excel, который позволит вписывать только по одной букве в ячейку, переходя после этого на следующую. Делал кому-то, разбирайтесь.
0 |
JohnJ 108 / 7 / 3 Регистрация: 29.06.2012 Сообщений: 28 |
||||||||
29.06.2012, 23:22 [ТС] |
8 |
|||||||
а как это будет работать с многострочными текстами? у меня нет многострочных текстов. Да и метод Next переводит на следующую не заблокированную ячейку, если я не ошибаюсь… Добавлено через 37 секунд Добавлено через 2 часа 16 минут
Во-первых, поправить надо отслеживаемый символ заключить в {}:
В этом случае и при русской раскладке будут печататься… латинские буквы. Но будут. Остается для каждой клавиши определять язык раскладки при помощи GetKeyboardLayoutName и в случае русской раскладки менять латинский символ на русский. Пока ничего красивей не придумал. + нет пока реакции на спецсимволы и цифры. Надо ещё почитать документацию, должно быть красивое и простое решение! Вот как раз после добавления фигурных скобок цифры перестают реагировать
Добавлено через 6 минут
0 |
1300 / 402 / 22 Регистрация: 21.10.2011 Сообщений: 1,285 |
|
02.07.2012, 12:16 |
9 |
JohnJ, Примечание:
0 |
JohnJ 108 / 7 / 3 Регистрация: 29.06.2012 Сообщений: 28 |
||||||||||
02.07.2012, 12:35 [ТС] |
10 |
|||||||||
Всем спасибо за помощь, я сделал. Если кому интересно, то вот как получилось (может кому-то пригодится, так как готового подобного скрипта я не нашёл, были только основанные на использовании textbox и т.п.):
Сам модуль макроса
Так же прилагаю книгу для просмотра результата, но она зашифрована паролем. Впрочем, читал что для профи нет сложностей расшифровать. Не знаю, не пробовал сам, в данном случае мне это не суть важно. Вложения
0 |
2784 / 716 / 106 Регистрация: 04.02.2011 Сообщений: 1,443 |
|
02.07.2012, 13:24 |
11 |
Потестирвал форму. Сделано хорошо, выглядит очень аккуратно и продуманно. Поле для e-mail можно чуть длинней. Нельзя нажать точку в русской раскладке (вставляется слэш). Нажатие Shift + буква приводит к необработке символа (неплохо бы предусмотеть, чтобы и Shift по привычке можно бы было набирать. Для этого надо добавить ассециаций Shift+Буква. Название партии повеселило — это серьезно или в шутку?
1 |
108 / 7 / 3 Регистрация: 29.06.2012 Сообщений: 28 |
|
02.07.2012, 13:32 [ТС] |
12 |
Саму форму разрабатывал не я. Название партии — это правда Благодарю за указания на недоработки и ошибки. Постараюсь сегодня исправить.
0 |
2784 / 716 / 106 Регистрация: 04.02.2011 Сообщений: 1,443 |
|
02.07.2012, 13:42 |
13 |
А где может понадобиться поставить точку в русской раскладке? В паспортных данных, в поле «зарегистрирован» — наименование органа внутренних дел. С точкой в e-mail нет проблем.
0 |
JohnJ 108 / 7 / 3 Регистрация: 29.06.2012 Сообщений: 28 |
||||||||||
02.07.2012, 14:14 [ТС] |
14 |
|||||||||
Исправил замечания: теперь можно использовал символ «точка» на русской раскладке, плюс эффект теперь распространяется на буквы, введённые с шифтом.
После 65-ой строки вставлена похожая:
Вложения
0 |
108 / 7 / 3 Регистрация: 29.06.2012 Сообщений: 28 |
|
02.07.2012, 14:43 [ТС] |
15 |
В общем, на моё предыдущее сообщение не смотрите. Если так сделать, то всё испортится.
0 |
1300 / 402 / 22 Регистрация: 21.10.2011 Сообщений: 1,285 |
|
02.07.2012, 17:55 |
16 |
JohnJ,
0 |
mc-black 2784 / 716 / 106 Регистрация: 04.02.2011 Сообщений: 1,443 |
||||
02.07.2012, 18:29 |
17 |
|||
Как лучше реализовать такую задумку: по нажатию на Enter Курсор должен занимать начальную позицию следующей строки для ввода. Можно, конечно, идти в цикле до следующей ячейки, пока не окажемся на отличной от следующей справа… Но может есть способ покрасивше? Для такой небольшой формочки подойдет и перебор в цикле, не критично, вот например
По поводу «покрасивше», в этом коде, несмотря на то, что он рабочий, мне не нравится 2 вещи: отсутствие Option Explicit и объявление переменных где попало. Обычно локальные переменные объявляются строго в начале процедуры, раньше первой исполняемой строчки. Так легче читать код и проще его поддерживать.
1 |
JohnJ 108 / 7 / 3 Регистрация: 29.06.2012 Сообщений: 28 |
||||||
02.07.2012, 22:01 [ТС] |
18 |
|||||
Сообщение было отмечено как решение Решениеmc-black, так как у меня на одной строке может быть несколько полей для ввода (например, строка 7), то реализовал переход немного по-другому. На счёт Option Explicit запомню, в следующий раз обязательно постараюсь его включить. В данном случае я узнал об этой директиве(?) в процессе написания скрипта, думая, по-началу, что код будет гораздо меньше и проще в итоге. И решил его не использовать…
Busine2012 Вложения
2 |
0 / 0 / 0 Регистрация: 02.07.2013 Сообщений: 2 |
|
02.07.2013, 14:56 |
19 |
Добрый день! Добавлено через 3 часа 24 минуты Set WS1 = ActiveSheet активный лист было бы даже достаточно, если бы макрос начинал работать на том листе, на котором я сейчас нахожусь, т.е. активном листе. Я так понял, тут написано, что ws1 активный лист, а ws2 лист который нам нужен и нажимая на него (в первую ячейку или «вообще» на него?) он становится активным.
0 |
В статье рассказывается, как настроить подстановку данных в документы сложной структуры
(где каждая буква — в отдельной клетке), при помощи программы заполнения документов.
Выглядят заполняемые документы примерно так: (щелкните на картинке для увеличения)
Наша задача — настроить этот шаблон так, чтобы программа заполнения документов подставляла в него текстовые данные,
а шаблон сам, при помощи формул, распределял вставленный текст по отдельным ячейкам.
Самый простой, на мой взгляд, способ добиться желаемого, — подставлять данные в «невидимые» ячейки,
а потом, при помощи формулы =ПСТР(), подтягивать отдельные буквы нужные ячейки.
(для ручной вставки текста в подобные бланки есть специальный макрос, но в нашем случае он не подойдёт)
Сделать ячейку «невидимой» — очень просто. Для этого достаточно назначить шрифту ячейки белый цвет.
А формулы будут иметь такой вид:
=ПСТР(АдресНевидимойЯчейки;1;1)
=ПСТР(АдресНевидимойЯчейки;2;1)
=ПСТР(АдресНевидимойЯчейки;3;1)
и т.д.
На следующем скриншоте показано, как это сделано: (щелкните на картинке для увеличения)
Теперь осталось выбрать место для «невидимой» ячейки, вписать в неё код поля (например, {улица}),
и проставить формулы во все ячейки-клеточки.
Делать это вручную — достаточно долго, да и легко ошибиться при вводе формул.
Для автоматизации настройки подобных шаблонов, в программе заполнения документов имеется специальная опция (см. скриншот)
Включив опцию «Вставлять формулы для разбивки текста по буквам»,
вам станет доступен макрос, который при нажатии Ctrl + Shift + V
- возьмёт текст из буфера обмена Windows (предполагается, что перед этим вы скопировали код поля в исходной таблице)
- вставит этот текст в ПЕРВУЮ из выделенных ячеек, назначив этой ячейке белый цвет шрифта
- пропишет формулы =ПСТР() с нужными параметрами, СО ВТОРОЙ ДО ПОСЛЕДНЕЙ выделенной ячейки
Как это работает — можно посмотреть в видеоинструкции:
<видео будет добавлено чуть позже>
- 24536 просмотров
Если у вас есть список чисел или слов на листе, и теперь вам нужно разбить содержимое ячейки на буквы в разных ячейках, как показано на следующем снимке экрана, как вы можете справиться с этим заданием в Excel?
Разделить слово или число на отдельные ячейки с помощью формулы
С помощью следующей простой формулы вы можете быстро и удобно разделить содержимое ячейки на разные ячейки.
1. В пустой ячейке рядом с вашими данными, например C1, введите эту формулу = MID ($ A1; COLUMNS ($ A $ 1: A $ 1); 1), см. снимок экрана:
2. Затем перетащите маркер заполнения в правые ячейки, пока не отобразятся пустые ячейки, а содержимое ячейки A1 не будет разделено на отдельные ячейки.
3. Затем, продолжая перетаскивать дескриптор заполнения вниз, в диапазон, в котором вы хотите применить эту формулу, и все данные в столбце A будут разделены по разным ячейкам по вашему желанию. Смотрите скриншот:
Разделить слово или число на отдельные ячейки с кодом VBA
Если вас интересует код VBA, следующий код также может оказать вам услугу.
1. Удерживайте ALT + F11 ключи в Excel, чтобы открыть Окно Microsoft Visual Basic для приложений.
2. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.
Код VBA: разделить слово на отдельные ячейки
Sub SplitStuff()
'Updateby Extendoffice
Dim Rng As Range
Dim InputRng As Range, OutRng As Range
xTitleId = "KutoolsforExcel"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8)
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
Application.ScreenUpdating = False
For Each Rng In InputRng
xValue = Rng.Value
xRow = Rng.Row
For i = 1 To VBA.Len(xValue)
OutRng.Cells(xRow, i).Value = VBA.Mid(xValue, i, 1)
Next
Next
Application.ScreenUpdating = True
End Sub
3, Затем нажмите F5 ключ для запуска этого кода, и окно подсказки напомнит вам выбрать диапазон данных, который вы хотите использовать, см. снимок экрана:
4. Нажмите OK, и появится другое окно с подсказкой, в котором вам будет предложено выбрать ячейку для поиска результата.
5. Затем нажмите OK, а слова или числа в выбранных ячейках были разделены на отдельные символы. Смотрите скриншот:
Разбить слово или число на отдельные ячейки с помощью Kutools for Excel
Kutools for ExcelАвтора Разделить клетки feature — мощный инструмент, который может помочь вам разделить содержимое ячейки на отдельные столбцы или строки с определенными разделителями, в то же время он также может разделить текст и число на два столбца.
После установки kutools for Excel, пожалуйста, сделайте следующее:
1. Выделите ячейки, которые хотите разделить.
2. Затем нажмите Кутулс > Слияние и разделение > Разделить клетки, см. снимок экрана:
3. В Разделить клетки диалоговое окно, выберите Разделить на столбцы под Тип, затем проверьте Укажите ширину под Разделить на раздел и введите номер 1 в текстовое поле, что означает разделение слова на отдельные ячейки по каждому символу. Смотрите скриншот:
4. Затем нажмите Ok При нажатии кнопки появляется другое окно подсказки, напоминающее о выборе ячейки для вывода результата, см. снимок экрана:
5, Затем нажмите OK, содержимое выделенной ячейки разделено на отдельные символы. Смотрите скриншот:
Скачать и бесплатную пробную версию Kutools for Excel от Yhao сейчас!
Разбить слово или число на отдельные ячейки с помощью Kutools for Excel
Объединяйте отдельные буквы или цифры в одно слово или цифру
Объединяйте отдельные буквы или цифры в одно слово или цифру
Если вы хотите объединить эти отдельные буквы ячеек в одно слово в отличие от вышеуказанных методов, Kutools for Excel‘s Сочетать утилита может помочь вам объединить их в одну ячейку так быстро, как вы можете.
Статьи по теме:
Как извлечь первое / последнее / n-е слово из текстовой строки в Excel?
Как извлечь первую букву каждого слова из ячейки?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!