У Шейлы есть рабочий лист, в который нужно ввести серию четырехзначных чисел. Ей нужен способ, при котором не нужно нажимать Enter или Tab между каждой записью. Другими словами, после нажатия каждой четвертой цифры Шейла хочет, чтобы Excel автоматически переходил к следующей ячейке.

Excel не предоставляет этот тип ввода данных в качестве опции. Однако вы можете создать макрос для обработки ввода данных. Один из способов — это простой макрос, который запрашивает у пользователя строку символов. Когда пользователь нажимает Enter (чтобы показать, что строка завершена), макрос берет каждый последующий четырехзначный фрагмент и помещает их в последовательные ячейки.

Sub FourCharEntry1()

Dim str As String     Dim x As Integer     Dim y As Integer

str = InputBox("Enter string")

y = 0     For x = 1 To Len(str) Step 4         ActiveCell.Offset(0, y) = "'" & Mid(str, x, 4)

y = y + 1     Next End Sub

Обратите внимание, что макрос, помещая фрагменты из четырех символов в ячейки, гарантирует, что каждому фрагменту предшествует апостроф. Причина этого заключается в обработке тех случаев, когда четырехсимвольный блок может состоять только из чисел, и эти числа начинаются с одного или нескольких нулей. Добавление апострофа гарантирует, что Excel обработает запись ячейки как текст, и начальные нули не будут стерты.

Вы также можете избежать использования InputBox, просто разрешив кому-либо вводить текст в ячейку на листе. Человек мог печатать сколько угодно (тысячи знаков, если необходимо).

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

Sub FourCharEntry2()

Dim str As String     Dim x As Integer     Dim y As Integer

str = ActiveCell.Value     y = 0     For x = 1 To Len(str) Step 4         ActiveCell.Offset(0, y) = "'" & Mid(str, x, 4)

y = y + 1     Next End Sub

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

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

Private Sub vText_Change()      If Len(vText) = 4 Then         ActiveCell = vText         ActiveCell.Offset(0, 1).Activate         UserForm1.vText.Value = ""

End If End Sub

Это просто запускается каждый раз, когда содержимое текстового поля изменяется (то есть, когда вы вводите каждый символ), а затем проверяет длину всего, что он содержит. Когда длина достигает 4, код берет эти символы и помещает их в ячейку. Затем содержимое vText очищается.

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

Private Sub Cancel_Click()

Unload UserForm1 End Sub

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

Sub Start()

UserForm1.Show End Sub

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

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

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

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

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

Этот совет (13102) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Automatically_Moving_from_Cell_to_Cell_when_Entering_Data [Автоматическое перемещение от ячейки к ячейке при вводе данных].