Работа с текстом в коде VBA Excel. Функции, оператор &
и другие ключевые слова для работы с текстом. Примеры использования некоторых функций и ключевых слов.
Функции для работы с текстом
Основные функции для работы с текстом в VBA Excel:
Функция | Описание |
---|---|
Asc(строка) | Возвращает числовой код символа, соответствующий первому символу строки. Например: MsgBox Asc(«/Stop»). Ответ: 47, что соответствует символу «/». |
Chr(код символа) | Возвращает строковый символ по указанному коду. Например: MsgBox Chr(47). Ответ: «/». |
Format(Expression, [FormatExpression], [FirstDayOfWeek], [FirstWeekOfYear]) | Преобразует число, дату, время в строку (тип данных Variant (String)), отформатированную в соответствии с инструкциями, включенными в выражение формата. Подробнее… |
InStr([начало], строка1, строка2, [сравнение]) | Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с начала строки. Подробнее… |
InstrRev(строка1, строка2, [начало, [сравнение]]) | Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с конца строки. Подробнее… |
Join(SourceArray,[Delimiter]) | Возвращает строку, созданную путем объединения нескольких подстрок из массива. Подробнее… |
LCase(строка) | Преобразует буквенные символы строки в нижний регистр. |
Left(строка, длина) | Возвращает левую часть строки с заданным количеством символов. Подробнее… |
Len(строка) | Возвращает число символов, содержащихся в строке. |
LTrim(строка) | Возвращает строку без начальных пробелов (слева). Подробнее… |
Mid(строка, начало, [длина]) | Возвращает часть строки с заданным количеством символов, начиная с указанного символа (по номеру). Подробнее… |
Replace(expression, find, replace, [start], [count], [compare]) | Возвращает строку, полученную в результате замены одной подстроки в исходном строковом выражении другой подстрокой указанное количество раз. Подробнее… |
Right(строка, длина) | Возвращает правую часть строки с заданным количеством символов. Подробнее… |
RTrim(строка) | Возвращает строку без конечных пробелов (справа). Подробнее… |
Space(число) | Возвращает строку, состоящую из указанного числа пробелов. Подробнее… |
Split(Expression,[Delimiter],[Limit],[Compare]) | Возвращает одномерный массив подстрок, извлеченных из указанной строки с разделителями. Подробнее… |
StrComp(строка1, строка2, [сравнение]) | Возвращает числовое значение Variant (Integer), показывающее результат сравнения двух строк. Подробнее… |
StrConv(string, conversion) | Изменяет регистр символов исходной строки в соответствии с заданным параметром «conversion». Подробнее… |
String(число, символ) | Возвращает строку, состоящую из указанного числа символов. В выражении «символ» может быть указан кодом символа или строкой, первый символ которой будет использован в качестве параметра «символ». Подробнее… |
StrReverse(строка) | Возвращает строку с обратным порядком следования знаков по сравнению с исходной строкой. Подробнее… |
Trim(строка) | Возвращает строку без начальных (слева) и конечных (справа) пробелов. Подробнее… |
UCase(строка) | Преобразует буквенные символы строки в верхний регистр. |
Val(строка) | Возвращает символы, распознанные как цифры с начала строки и до первого нецифрового символа, в виде числового значения соответствующего типа. Подробнее… |
WorksheetFunction.Trim(строка) | Функция рабочего листа, которая удаляет все лишние пробелы (начальные, конечные и внутренние), оставляя внутри строки одиночные пробелы. |
В таблице перечислены основные функции VBA Excel для работы с текстом. С полным списком всевозможных функций вы можете ознакомиться на сайте разработчика.
Ключевые слова для работы с текстом
Ключевое слово | Описание |
---|---|
& | Оператор & объединяет два выражения (результат = выражение1 & выражение2). Если выражение не является строкой, оно преобразуется в Variant (String), и результат возвращает значение Variant (String). Если оба выражения возвращают строку, результат возвращает значение String. |
vbCrLf | Константа vbCrLf сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит последующий текст на новую строку (результат = строка1 & vbCrLf & строка2). |
vbNewLine | Константа vbNewLine в VBA Excel аналогична константе vbCrLf, также сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит текст на новую строку (результат = строка1 & vbNewLine & строка2). |
Примеры
Вывод прямых парных кавычек
Прямые парные кавычки в VBA Excel являются спецсимволами и вывести их, заключив в самих себя или в одинарные кавычки (апострофы), невозможно. Для этого подойдет функция Chr:
Sub Primer1() ‘Вывод одной прямой парной кавычки MsgBox Chr(34) ‘Отображение текста в прямых кавычках MsgBox Chr(34) & «Волга» & Chr(34) ‘Вывод 10 прямых парных кавычек подряд MsgBox String(10, Chr(34)) End Sub |
Смотрите интересное решение по выводу прямых кавычек с помощью прямых кавычек в первом комментарии.
Отображение слов наоборот
Преобразование слова «налим» в «Милан»:
Sub Primer2() Dim stroka stroka = «налим» stroka = StrReverse(stroka) ‘милан stroka = StrConv(stroka, 3) ‘Милан MsgBox stroka End Sub |
или одной строкой:
Sub Primer3() MsgBox StrConv(StrReverse(«налим»), 3) End Sub |
Преобразование слова «лето» в «отель»:
Sub Primer4() Dim stroka stroka = «лето» stroka = StrReverse(stroka) ‘отел stroka = stroka & «ь» ‘отель MsgBox stroka End Sub |
или одной строкой:
Sub Primer5() MsgBox StrReverse(«лето») & «ь» End Sub |
Печатная машинка
Следующий код VBA Excel в замедленном режиме посимвольно печатает указанную строку на пользовательской форме, имитируя печатную машинку.
Для реализации этого примера понадобится пользовательская форма (UserForm1) с надписью (Label1) и кнопкой (CommandButton1):
Код имитации печатной машинки состоит из двух процедур, первая из которых замедляет выполнение второй, создавая паузу перед отображением очередного символа, что и создает эффект печатающей машинки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub StopSub(Pause As Single) Dim Start As Single Start = Timer Do While Timer < Start + Pause DoEvents Loop End Sub Private Sub CommandButton1_Click() Dim stroka As String, i As Byte stroka = «Печатная машинка!» Label1.Caption = «» For i = 1 To Len(stroka) Call StopSub(0.25) ‘пауза в секундах ‘следующая строка кода добавляет очередную букву Label1.Caption = Label1.Caption & Mid(stroka, i, 1) Next End Sub |
Обе процедуры размещаются в модуле формы. Нажатие кнопки CommandButton1 запустит замедленную печать символов в поле надписи, имитируя печатную машинку.
Описание функции
К сожалению, в Excel нет встроенной функции, которая возвращает конец строки после заданного текста. Хотя можно решить эту задачу и стандартными функциями, но не всегда их можно на память или логику быстро воспроизвести.
Вот этот набор функций, не очень то очевидно, согласитесь:
=ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ(«Заданный текст»;A1;1)-ДЛСТР(«Заданный текст»))
Для удобства в надстройку VBA-Excel добавлена функция КОНЕЦСТРОКИ. Она выполняет поиск заданного текста с конца строки и возвращает текст от искомой позиции до конца строки. И интерфейс у нее намного понятнее:
Функция =КОНЕЦСТРОКИ(ТЕКСТ; НАЙТИ; [Старт]; [Регистр]) имеет 4 аргумента:
- ТЕКСТ — Исходный текст, в котором необходимо найти начало строки.
- НАЙТИ — Подстрока, до которой будет возвращаться начало строки
- [Старт] — Необязательный параметр. Позиция внутри исходного текста, с которой начинается поиск подстроки. По умолчанию параметр равен 1.
- [Регистр] — Необязательный аргумент, указывающий необходимость учета регистра. По умолчанию равен 1 — регистр учитывается. Укажите значение 0 если не хотите учитывать регистр при сравнении.
Пример 1
Найти текст до слова СТОП. Обратите внимание не важно в какой части текста находится заданное слово.
Пример 2
Чтобы вернуть текст без первого слова укажите пробел в параметре НАЙТИ.
Пример 3
Можно начинать поиск с заданной позиции (аргумент Старт). Может понадобиться в случае если стоп-слово встречается не один раз.
Пример 4
В предыдущих примерах регистр искомого текста учитывался. Для того чтобы заглавные и строчные буквы НЕ учитывались при поиске, установите параметр Регистр = 0.
Код на VBA
Часто люди, работающие в табличной программе Эксель, сталкиваются с такой ситуацией, когда нужно совершить перенос строчки. Реализовать эту несложную процедуру можно разнообразными способами. В статье мы детально разберем все методы, позволяющие осуществить перенос строчки на рабочей области табличного документа.
Содержание
- Как удалить переносы строк из ячеек в Excel 2013, 2010 и 2007
- Удаляем возвраты каретки вручную
- Удаляем переносы строк при помощи формул Excel
- Удаляем переносы строк при помощи макроса VBA
- Перенос текста в ячейке
- Автоматический перенос текста
- Настройка высоты строки для отображения всего текста
- Ввод разрыва строки
- Как сделать перенос строки в ячейке Excel формулой
- Формула для переноса строки в ячейках Excel
- Как работает функция СИМВОЛ при переносе строк в ячейке
- Деление на столбцы по переносу строки
- Деление на строки по Alt+Enter через Power Query
- Макрос для деления на строки по Alt+Enter
- Выводы
Как удалить переносы строк из ячеек в Excel 2013, 2010 и 2007
Существует 3 метода, позволяющих реализовать удаление возврата каретки из полей. Некоторые из них реализуют замещение знаков переноса строчки. Рассмотренные ниже варианты одинаково работают в большинстве версий табличного редактора.
Перенос строчки в текстовой информации возникает по самым разнообразным причинам. К частым причинам относятся такие моменты, как использование сочетания клавиш «Alt+Enter», а также перенос текстовых данных из интернет-странички в рабочую область табличной программы. Нам необходимо произвести удаление возврата каретки, так как без этой процедуры невозможно реализовать нормальный поиск точных фраз.
Важно! Изначально фразы «Перевод строчки» и «Возврат каретки» применялись во время работы на печатных машинах и обозначали 2 разнообразных действия. Персональные компьютеры создавались с учетом функций машинок для печати.
Удаляем возвраты каретки вручную
Разберем детально первый метод.
- Преимущество: быстрота выполнения.
- Недостаток: отсутствие дополнительных функций.
Подробная инструкция выглядит так:
- Производим выделение всех ячеек, в которых необходимо реализовать данную операцию или же осуществить замену знаков.
- При помощи клавиатуры жмем комбинацию кнопок «Ctrl+H». На экране возникло окошко, имеющее наименование «Найти и заменить».
- Выставляем указатель в строчку «Найти». При помощи клавиатуры жмем комбинацию кнопок «Ctrl+J». В строчке появилась небольшая точка.
- В строчку «Заменить на» вводим какое-нибудь значение, которое вставится вместо возвратов каретки. Чаще всего применяют пробел, так как он позволяет исключить склеивание 2-х соседствующих фраз. Для реализации удаления переноса строчек необходимо строчку «Заменить на» не заполнять какой-либо информацией.
- При помощи ЛКМ щелкаем на «Заменить все». Готово! Мы реализовали удаление возврата каретки.
Удаляем переносы строк при помощи формул Excel
- Преимущество: возможность применения разнообразных формул, осуществляющих сложнейшую проверку текстовой информации в выбранном поле. К примеру, можно реализовать удаление возвратов каретки, а потом отыскать ненужные пробелы.
- Недостаток: необходимо создание дополнительной колонки, а также выполнение большого количества манипуляций.
Подробная инструкция выглядит так:
- Реализуем добавление дополнительной колонки в конце исходной информации. В рассматриваемом примере она получит наименование «1 line»
- В 1-е поле дополнительной колонки (С2) вбиваем формулу, реализующую удаление или замену переносов строчек. Для осуществления этой операции применяется несколько формул. Формула, подходящая для применения с сочетаниями возврата каретки и переноса строчки, выглядит так: =ПОДСТАВИТЬ(ПОДСТАВИТЬ(В2;СИМВОЛ(13);»»);СИМВОЛ(10);»»).
- Формула, подходящая для осуществления замены переноса строчки каким-либо знаком, выглядит так: =СЖПРОБЕЛЫ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(В2;СИМВОЛ(13);»»);СИМВОЛ(10);», «). Стоит заметить, что в этом случае не произойдет объединение строчек.
- Формула, позволяющая произвести удаление всех непечатаемых знаков из текстовых данных, выглядит так: =ПЕЧСИМВ(B2).
- Производим копирование формулы, а затем вставляем ее в каждую ячейку дополнительной колонки.
- Дополнительно можно осуществить замену первоначальной колонки новой, в которой будут удалены переносы строчек.
- Производим выделение всех ячеек, располагающихся в колонке С. Зажимаем комбинацию «Ctrl+C» на клавиатуре, чтобы реализовать копирование информации.
- Производим выбор поля В2. Зажимаем комбинацию кнопок «Shift+F10». В возникшем небольшом перечне жмем ЛКМ на элемент, имеющий наименование «Вставить».
- Реализуем удаление вспомогательной колонки.
Удаляем переносы строк при помощи макроса VBA
- Преимущество: создание происходит только 1 раз. В дальнейшем этот макрос можно применять и в остальных табличных документах.
- Недостаток: необходимо понимание работы языка программирования VBA.
Для реализации этого метода нужно попасть в окошко для ввода макросов и ввести туда такой код:
Перенос текста в ячейке
Табличный редактор Эксель позволяет осуществить перенос текстовой информации в поле. Это делается для того, чтобы текстовые данные выводились на нескольких строчках. Можно произвести процедуру настройки для каждого поля, чтобы перенос текстовых данных производился в автоматическом режиме. Дополнительно можно реализовать разрыв строчки ручным способом.
Автоматический перенос текста
Разберем детально, как реализовать процедуру автоматического переноса текстовых значений. Пошаговый алгоритм выглядит так:
- Производим выделение необходимой ячейки.
- В подразделе «Главная» находим блок команд, имеющий наименование «Выравнивание».
- При помощи ЛКМ выбираем элемент «Перенести текст».
Важно! Информация, находящаяся в ячейках, будет переноситься с учетом ширины колонки. Редактирование ширины колонки автоматически настроит перенос текстовых данных.
Настройка высоты строки для отображения всего текста
Разберем детально, как реализовать процедуру настройки высоты строчки для вывода всей текстовой информации. Подробная инструкция выглядит так:
- Производим выбор нужных ячеек.
- В подразделе «Главная» находим блок команд, имеющий наименование «Ячейки».
- При помощи ЛКМ выбираем элемент «Формат».
- В окошке «Размер ячейки» необходимо выполнить один из нижеописанных вариантов. Первый вариант – для автоматического выравнивания высоты строчки жмем ЛКМ на элемент «Автоподбор высоты строки». Второй вариант – для задания высоты строчек ручным способом необходимо кликнуть на элемент «Высота строки», а затем вбить желаемый показатель в пустую строчку.
Ввод разрыва строки
Разберем детально как реализовать процедуру ввода разрыва строчки. Подробная инструкция выглядит так:
- Двойным нажатием ЛКМ осуществляем выбор поля, в которое желаем вбить разрыв строчки. Стоит заметить, что можно произвести выделение необходимого поля, а потом щелкнуть на «F2».
- Двойным нажатием ЛКМ осуществляем выбор того места, где будет добавлен разрыв строчки. Зажимаем комбинацию «Alt+Enter». Готово!
Как сделать перенос строки в ячейке Excel формулой
Часто пользователи табличного редактора добавляют на рабочую область разнообразные диаграммы и графики. Обычно эта процедура требует переноса строчек в текстовой информации поля. Детально разберемся, как реализовать этот момент.
Формула для переноса строки в ячейках Excel
К примеру, у нас есть гистограмма, реализованная в табличной программе. На оси Х располагаются имена работников, а также информация об их продажах. Этот тип подписи очень удобен, так как он наглядно показывает объем работ, совершаемый работниками.
Реализовать эту процедуру очень легко. Нужно произвести добавление оператора СИМВОЛ в место формулы. Она позволяет реализовать генерацию показателей в полях для подписи информации в диаграмму.
Безусловно, в поле можно реализовать процедуру переноса строчки в любом месте, благодаря комбинации кнопок «Alt+Enter». Однако такой метод неудобен в случаях, когда данных слишком много.
Как работает функция СИМВОЛ при переносе строк в ячейке
Программа использует коды из таблички знаков ASCII. В ней располагаются коды знаков, отображаемых на дисплее в ОС. В табличке содержится двести пятьдесят пять пронумерованных кодов.
Пользователь табличного редактора, знающий эти коды, может применить их в операторе СИМВОЛ, чтобы реализовать вставку любого знака. В примере, рассмотренном выше, добавлен знак переноса строчки, который соединяется с двух сторон «&» между показателями полей С2 и А2. Если в поле не активирован режим под названием «Перенести текст», то наличие знака переноса строчки пользователь не заметит. Это видно на нижеприведенном изображении:
Стоит отметить, что на разнообразных графиках знаки переноса строчек, добавленные при помощи формулы, будут выводиться стандартным образом. Иными словами, будет производиться разбитие текстовой строчки на 2 и более.
Деление на столбцы по переносу строки
Если юзер в подразделе «Данные» выберет элемент «Текст по столбцам», то он сможет реализовать перенос строчек и разделение тестовой информации на несколько ячеек. Процесс осуществляется при помощи комбинации «Alt+Enter». В окошке «Мастер распределения текста по столбцам» необходимо поставить галочку около надписи «другой» и ввести сочетание «Ctrl+J».
Если поставить галочку около надписи «Считать последовательные разделители одним», то можно реализовать «схлопывание» нескольких переносов строчек подряд. На конченом этапе щелкаем на «Далее». В итоге мы получим:
Деление на строки по Alt+Enter через Power Query
Бывают ситуации, когда пользователю необходимо осуществить деление многострочной текстовой информации не на колонки, а на строчки.
Для реализации этой процедуры отлично подходит надстройка «Power Query», появившаяся в табличном редакторе с 2016 года. Подробная инструкция выглядит так:
- При помощи комбинации «Ctrl+T» преобразуем исходные данные в «умную» табличку. Альтернативный вариант – передвигаемся в подраздел «Главная» и кликаем ЛКМ на элемент «Форматировать как таблицу».
- Передвигаемся в подраздел «Данные» и щелкаем на элемент «Из таблицы/диапазона». Эта операция позволит импортировать табличку в инструмент «Power Query».
- Производим выделение колонки с многострочной текстовой информацией. Передвигаемся в подраздел «Главная». Раскрываем перечень показателя «Разделить столбец» и кликаем ЛКМ на элемент «По разделителю».
- Жмем на «ОК», чтобы подтвердить внесенные изменения. Готово!
Макрос для деления на строки по Alt+Enter
Рассмотрим, как реализовать эту процедуру при помощи специального макроса. Производим открытие VBA при помощи комбинации клавиш «Alt+F11» на клавиатуре. В возникшем окошке жмем «Insert», а затем «Module». Сюда добавляем такой код:
Возвращаемся на рабочую область и выбираем поля, в которых располагается многострочная информация. Жмем комбинацию «Alt+F8» на клавиатуре, чтобы активировать созданный макрос.
Выводы
Исходя из текста статьи, можно заметить, что существует огромное количество способов, реализующих перенос строчки в табличном документе. Произвести эту процедуру можно при помощи формул, операторов, специальных инструментов и макросов. Каждый юзер сможет сам подобрать для себя наиболее удобный метод.
Оцените качество статьи. Нам важно ваше мнение:
Skip to content
На чтение 2 мин. Просмотров 4.9k.
Что делает макрос: Бывают случаи, когда необходимо добавить текст в начало или конец ячеек в диапазоне. Например, вам может нужно добавить код города к набору телефонных номеров. Этот макрос демонстрирует, как можно автоматизировать задачи стандартизации данных, которые требуют добавления данных значений.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
Этот макрос использует два объекта Range переменных пройти через целевой диапазон, усиливая для каждого оператора, чтобы активировать каждую ячейку в целевом диапазоне.
Каждый раз, когда клетка активируется, макрокоманда прибавляет код города к началу значения ячейки.
Код макроса
Sub DobavitTekst() 'Шаг 1: Объявляем переменные Dim MyRange As Range Dim MyCell As Range 'Шаг 2: Сохранить книгу прежде,чем изменить ячейки? Select Case MsgBox("Перед изменением ячеек. " & _ "Сохранить книгу?", vbYesNoCancel) Case Is = vbYes ThisWorkbook.Save Case Is = vbCancel Exit Sub End Select 'Шаг 3: Определение целевого диапазона Set MyRange = Selection 'Шаг 4: Запускаем цикл по диапазону For Each MyCell In MyRange 'Шаг 5: Убедитесь, что ячейка имеет формат текста If Not IsEmpty(MyCell) Then MyCell = "(972) " & MyCell End If 'Шаг 6: Получите следующую ячейку в диапазоне Next MyCell End Sub
Как этот код работает
- Шаг 1 объявляет две переменные объекта Range.
- Мы должны сохранить книгу перед запуском макроса.
- Шаг 3 заполняет переменную MyRange с целевым диапазоном. В этом примере мы используем выбранный диапазон — диапазон, который был выбран в электронной таблице.
- Шаг 4 начинает цикл через каждую ячейку в целевом диапазоне.
- После того, как ячейка активируется, мы используем амперсанд (&), чтобы объединить код зоны с ячейкой. Если вам нужно добавить текст в конец значения ячейки, нужно просто поместить амперсанд и текст в конце. Например, MyCell = MyCell & «добавлен текст».
- Шаг 6 повторяет цикл, чтобы получить следующую ячейку. После просмотра всех ячеек в целевом диапазоне макрос заканчивается.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
Как удалить переносы строк (возвраты каретки) из ячеек в Excel 2013, 2010 и 2007
Смотрите такжеД_Р со вcтроенным языком и вариант без: Цитата: «Пробовала изСветлана В Dim OutText As Exit Function End будет незаметно: функцию СИМВОЛ в предыдущие варианты., отметив его галочкой.
Некоторые пользователи пытаются перенестии выберите(LOOKUP). возвраты каретки или две различных операции.Эта инструкция познакомит Вас: Макрос не не программирования Fred и макроса: чтобы после форда вставлять -: Добрый день. Возник String Delimeter = If ‘проходим поНо на гистограммах, графиках нужное место формулы,
Урок: Жмем на кнопку текст внутри ячейкиВставитьМинусы: заменить их другим Любознательный читатель может с тремя способами сохраняет пробел… а возможностью подключения скомпилированных Ctrl-F ввести в
не понимает его вопрос — есть Chr(10) все ячейкам, проверяем
- и диаграммах символы которая генерирует значенияПолезные функции Excel«OK»
- нажатием на клавиатуре(Insert).Потребуется создать вспомогательный символом. самостоятельно найти подробную
- удалить возвраты каретки его там в ассемблерных и С-кодов. поле «Найти» знак
эксель». А если большая таблица вexcel_pl условие и собираем переноса строк, вставленные в ячейках дляВ целом пользователь должен. кнопкиУдалите вспомогательный столбец. столбец и выполнить
Нажмите информацию об этом из ячеек в принципе не бывает.Возможной причиной неработы перевода строки, нужно наоборот: берем в кучей данных. В: А каких-нибудь спец. текст в переменную с помощью формул подписи данных гистограммы. сам решить, какимПосле этого, если данныеEnterПлюсы: множество дополнительных шагов.Ctrl+H в интернете. Excel. Вы такжеНу вот как
Ctrl-J у Алексея нажать Ctrl-J XL, вставляем в некоторых ячейках текст символов вместо запятой OutText For i либо введенные изКонечно в ячейке можно из предложенных способов будут выступать за. Но этим ониСоздаём один разДобавьте вспомогательный столбец в, чтобы вызвать диалоговоеКомпьютеры и программное обеспечение узнаете, как заменить в ворде печатают (Alex_ST) может быть,Остается только очистить Word, выделяем, жмем представлен в виде для строчки « = 1 To
Удаляем возвраты каретки вручную
клавиатуры (ALT+Enter) будут сделать перенос строки оптимальнее воспользоваться в
границы ячейки, то добиваются только того,
– используем снова конце данных. В окно для работы с символы переноса строки
- Иванов(энтер)Иван Иванович, то например, какая-нибудь утилита поле «Заменить на» (если не ошибся) нескольких строк, как
- Delimeter = «, « SearchRange.Cells.Count If SearchRange.Cells(i) отображаться естественным образом. в любом месте конкретном случае. Если она автоматически расширится
- что курсор перемещается и снова с нашем примере онНайти и заменить текстами разрабатывались с другими символами. Все есть по факту автоматического переключения раскладки и нажать кнопку «Alt+X» — получаем если бы его
- » нету? Like Condition Then То есть переносом с помощью комбинации вы хотите только, в высоту, а на следующую строку любой рабочей книгой. будет называться(Find and Replace). учётом особенностей печатных предложенные решения работают там пробела и клавиатуры.
- «Заменить все». код. Далее в вводили вручную черезнапример, что-нибудь в
Удаляем переносы строк при помощи формул Excel
OutText = OutText разбивать одну текстовую клавиш ALT+Enter. Но чтобы все символы слова станут переноситься. листа. Мы жеМинусы:1 lineПоставьте курсор в поле машинок. Вот почему в Excel 2013, нет.
Вставка символа переводаAlex_ST XL, к примеру, Alt+Enter. Подскажите, как духе : & TextRange.Cells(i) & строку на две если таких ячеек вмещались в границы Иногда приходится расширять рассмотрим варианты переносаТребуется хотя бы
.Найти теперь для обозначения 2010, 2007 и
- Тогда наверное нужна строки по Ctrl-J: Наверное, «очепятка» - «=СИМВОЛ(160)»… убрать эти знакиrn
- Delimeter Next i и больше. десятки лучше автоматизировать ячейки, то просто границы вручную. именно внутри ячейки, базовое знание VBA.
- В первой ячейке вспомогательного(Find what) и разрыва строки используют 2003. просто замена знака полезна не только
не Ctrl+J, а
Z.
- переноса, либо заменить; ‘выводим результаты безЗнаю что в C/C# данный процесс с отформатируйте её нужнымЧтобы подобным образом не как очень простые,Макрос VBA из следующего столбца (C2) введите
нажмите
два различных непечатаемых
- Переносы строк могут появиться переноса строки на в поиске-замене, но Ctrl+H ? Или
Светлана В
их на пробелы?
- В первой ячейке вспомогательного(Find what) и разрыва строки используют 2003. просто замена знака полезна не только
- Sanja последнего разделителя MergeIf
- это символ - помощью простой выше образом, а лучше форматировать каждый отдельный
- так и более примера удаляет возвраты формулу для удаления/заменыCtrl+J символа: в тексте по пробел, а потом
- и в пользовательском я чего-то не: Вы не поверите,Ячейки заранее неизвестны.: Kuzmich, же Вам = Left(OutText, Len(OutText) n, а как
- приведенной формулы.
Удаляем переносы строк при помощи макроса VBA
всего отформатировать весь элемент, можно сразу сложные. каретки из всех переносов строк. Ниже
. На первый взглядВозврат каретки разным причинам. Обычно
trim чтобы удалить формате. Приложил пример, знаю? но это была Я бы через
показал — Len(Delimeter)) End можно программно задать диапазон. Если вы выделить целую область.Самый простой вариант переноса ячеек на активном приведены несколько полезных поле покажется пустым,(Carriage return, CR возвраты каретки встречаются второй лишний пробел…
когда в ячейкеZVI не я))))) Заменить сделала, ноЮрий М Function принудительный перенос строки
Программа MS Excel активно хотите устроить перенос
Недостаток данного варианта
на другую строку,
листе.
office-guru.ru
Перенос строки в пределах ячейки в Microsoft Excel
формул для различных но если посмотрите или ASCII код в рабочей книге,Д_Р нужно хранить дробное: Алексей, Ctrl-J нажимать,Но спасибо, этот не знаю, как: excel_pl, Вы неСцепка происходит по в excel? применяет коды из конкретных слов, то заключается в том, это установить курсорSub RemoveCarriageReturns() Dim
случаев: внимательно, то увидите
Способы переноса текста
13) и например, когда текст: сам спросил сам число, но отображать когда курсор находится способ намного удобнее, в экселе обозначить отписались в своих принципу:… таблицы символов стандарта наберите соответствующее сочетание что перенос выполняется перед тем отрезком, MyRange As Range
Способ 1: использование клавиатуры
Эта формула подходит для в нём маленькуюПеревод строки скопирован с веб-страницы, решил;) только целые с в поле «Найти». чем мой кривенький знак переноса. старых темах, а
Текст 1, Текст: Если в макросе: ASCII. В ней клавиш, как рассказано только в том который нужно перенести, Application.ScreenUpdating = False
использования с комбинациями точку.
Способ 2: форматирование
(Line feed, LF когда они ужеfly1 отброшенной дробной частью,Alex_ST макрос)Переносить в Ворд, уже создали новую. 2»Строка1″ & vbCr находятся все коды
- в описании первого случае, если слова а затем набрать Application.Calculation = xlCalculationManual возврат каретки /В поле или ASCII код есть в рабочей: Можно узнать решение?
- т.е. без округления.: Я уж иNicks чистить там, а Или ответы неВопрос & vbLf & символов, которые высвечиваются способа. Третий вариант не будут вмещаться на клавиатуре сочетание
For Each MyRange перенос строки, характернымиЗаменить на 10). В Windows книге, полученной от Тоже нужноAnna левый Ctrl+J и
: Как вариант формула потом обратно в интересуют?Как сделать чтобы «Строка2″ на экране в рекомендуется использовать только в границы, к клавиш In ActiveSheet.UsedRange If для Windows и(Replace With) введите используются оба символа клиента, или, когда
Способ 3: использование формулы
Казанский: а как в правый, а всё =ПЕЧСИМВ() далее по Эксель — неexcel_pl разделитель был неЕсли в ячейке операционной системе MS тогда, когда данные
- тому же разбитиеAlt+Enter
- 0 < InStr(MyRange, для UNIX. любое значение для вместе, а в
мы сами добавляем
: Видимо, заменить Ctrl+J формулу вставить знак бестолку… Данные не потребностям…. вариант.: Вопрос решён. «, «, а перенос: Windows любых версий.
- подтягиваются из других осуществляется автоматически без. Chr(10)) Then MyRange=ПОДСТАВИТЬ(ПОДСТАВИТЬ(B2;СИМВОЛ(13);»»);СИМВОЛ(10);»»)
вставки вместо возвратов системах *NIX применяется их нажатием клавиш на пробел, или абзаца, допустим в
найдены. Хотя яСветлана В
Спасибо.Всем спасибо. перенос текста наAlt + Enter Таблица символов стандарта диапазонов с помощью учета желания пользователя.В отличие от использования = Replace(MyRange, Chr(10),=SUBSTITUTE(SUBSTITUTE(B2,CHAR(13),»»),CHAR(10),»») каретки. Обычно для только перевод строки.Alt+Enter… формулу СЦЕПИТЬ()? сам вводил перенос: было бы паруGuestIgor_Tr следующую строчку?Если в формуле: ASCII содержит 255 формулы. В остальныхТакже можно осуществить перенос только одной кнопки «») End IfСледующая формула подходит для этого используют пробел,Будьте внимательны:.
Cells.Replace What:=Chr(10), Replacement:=»
lumpics.ru
Как сделать перенос строки в ячейке Excel формулой
точнее не знак, строки в ячейку… столбцов в иходнике: А точнее? Вариантов: В ячейке ввелиТ.е., чтобы сцепка=»Строка1″ & CHAR(10) кодов по которым случаях использование данного внутри ячейки приEnter
Формула для переноса строки в ячейках Excel
Next Application.ScreenUpdating = замены переноса строки чтобы избежать случайногоВ Excel встречаютсяКакой бы ни была » … а сам абзац,А это точно — без вопросов))) море: найти-заменить, подставить строку при помощи происходила по принципу: & «Строка2» (англ.
пронумерованы все символы способа является нерациональным, помощи формул. Этот, с помощью этого True Application.Calculation = любым другим символом склеивания двух соседних оба варианта. При
причина их появления,… чтобы тескт с под 2003-им работает? но в данном (знать код знака), Alt + EnterТекст 1 Excel) от 1-го и
так как имеются
Как работает функция СИМВОЛ при переносе строк в ячейке
вариант особенно актуален способа будет достигнут xlCalculationAutomatic End Sub (например, «, » слов. Если нужно импорте из файлов сейчас перед намиъ абзаца начиналсяKuklP случае строк и удалить ненужное - (переносить по словам).Текст 2=»Строка1″ & СИМВОЛ до 255. Например, гораздо более простые в том случае, именно такой результат,Если Вы не слишком – запятая + просто удалить переносы.txt стоит задача удалить: fly1, Вы этоКазанский: Леш, у меня столбцов — куча)))
печсимв, сжать пробелы, Средствами VBA нуSanja (10) & «Строка2″ большая (в верхнем варианты решения поставленной если содержимое выводится который ставится. близко знакомы с пробел). В таком строк, оставьте полеили возвраты каретки, так
видели?: =СЦЕПИТЬ(СИМВОЛ(10);»текст») работает(2003). И в данные идут с trim и т.п.
никак не могу: Function MergeIf(TextRange As (русск. Excel) регистре) буква А задачи. с помощью функций,Урок: VBA, рекомендую изучить случае строки неЗаменить на.csv
exceltable.com
Какой символ в excel означает принудительный перенос строки?
как они мешаютfly1или 2007 тоже. Срабатывает разных регионов, каждыеZ.
избавиться от символа Range, SearchRange As
Для использования в имеет код 97.Автор: Максим Тютюшев
но его можноГорячие клавиши в Экселе
статью о том,
будут объединены и
(Replace With) пустым.данные обычно содержат выполнять поиск фраз
: Вообще эта моя=СИМВОЛ(10)&»текст» даже с vbcrlf,
в меру способностейGuest переноса (между выражениями Range, Condition As формуле — нужно, Числу 9 поВо время создания графиков
Как сделать перенос строки с использованием VBA?
применять и вЕсли перед пользователем не как вставить и лишние пробелы неНажмите кнопку возвраты каретки и и приводят к первая проба общенияВ формате ячейки только vbcr оставляет. изгаляются с форматированием): Не уверен за — квадратик, тоесть String) Dim i чтобы в ячейке этой же таблице и диаграмм в обычных случаях. ставится задачи перенести выполнить код VBA появятся.Заменить все переводы строки. Когда беспорядку в столбце с макросами. надо включить «переноситьКазанскийopenid.mail.ru/mail/vlad3622340 правильность ответа, но Chr(7)). Как убрать As Long ‘если в свойствах стоял присвоен код 57. Excel часто возникаетОтформатируйте ячейку, как указано на новую строку в Excel.=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(B2;СИМВОЛ(13);»»);СИМВОЛ(10);», «)
(Replace All) и перенос строки вводится
при включении режимаСоздал в VBA
по словам».
: Владимир,: абзац СИМВОЛ(182) можно попробовать знак эту заразу? Встречал диапазоны проверки и
включенный перенос слов. Код символа пробела
необходимость сделать перенос
в предыдущем варианте.
строго определенные слова,Урок подготовлен для Вас=TRIM(SUBSTITUTE(SUBSTITUTE(B2,CHAR(13),»»),CHAR(10),», «) наслаждайтесь результатом! вручную нажатием переноса текста. такую запись:viktturспасибо! Я смутномягкий перенос СИМВОЛ(172) переноса (абзаца) скопировать кто? склеивания не равны Иначе работать не – 32, а строки в текстеВыделите ячейку и введите а нужно только командой сайта office-guru.ruА вот так можноПлюсы:Alt+EnterВсе три представленных способаCells.Replace What:=Chr(10), Replacement:=»»,: сочетание Alt+Enter создает помнил, что как-тонеразрывный пробел СИМВОЛ(160)
в поле «Заменить:»,petr-sev друг другу - будет. код переноса строки ячейки и не
в неё или уместить их вИсточник: https://www.ablebits.com/office-addins-blog/2013/12/03/remove-carriage-returns-excel/ удалить все непечатаемыеДоступно использование последовательных, Excel вставляет только
довольно быстры. Выбирайте LookAt:=xlPart, SearchOrder _ новую строку в вводил перевод строки
Наверное, их надо а в поле: И не получится,
выходим с ошибкойexcel_pl имеет число 10. только. Например, чтобы в строку формул пределах одной ячейки,Перевел: Антон Андронов
символы из текста, или вложенных формул
символ перевода строки.
planetaexcel.ru
Удалить из строки символ переноса по словам ?
тот, который Вам:=xlByRows, MatchCase:=False, SearchFormat:=False, ячейке. Это равнозначно в поле поиска найти и заменить «Заменть на:» ставим потому что код If SearchRange.Count <>: Код сцепляет столбец В этой же получить лучший визуальный следующее выражение: не выходя за
Автор: Антон Андронов включая переносы строк: для сложной проверки Если же файл больше подходит: ReplaceFormat:=False
вставке СИМВОЛ(10) еще в Excel на пробел СИМВОЛ(32) пробел или оставлеям
символа принудительного переноса TextRange.Count Then MergeIf
по критериюСкрытый текст таблице содержатся непечатные эффект для читабельности=СЦЕПИТЬ(«ТЕКСТ1″;СИМВОЛ(10);»ТЕКСТ2») её границы, то
Как известно, по умолчанию=ПЕЧСИМВ(B2) текста в обрабатываемой.csvУдаляем все переносы строк
CyberForum.ru
Как удалить значки переноса в ячейке
End SubД_Р 5 (под WinNicks пусто. не 7, а = CVErr(xlErrRef) Exit Option Compare Text символы с клавиатуры. подписей данных наВместо элементов можно воспользоваться инструментом в одной ячейке=CLEAN(B2)
ячейке. Например, можнополучен от поклонника вручную, чтобы быстроCells.Replace What:=Chr(10), Replacement:=»: Всех с наступающим! 3.11), но забыл
: Не надо жалетьСветлана В 10 Function End If Function MergeIf(TextRange As
Зная соответствующие коды из
графиках и диаграмме.«ТЕКСТ1» форматирования. листа Excel располагаетсяСкопируйте формулу во все удалить возвраты каретки, Linux, Unix или
навести порядок на
«немножко реанимирую тему. как. места на диске: Попробовать-то можно, ноЗамена в текущей For i = Range, SearchRange As таблицы ASCII иРассмотрим пример ниже на
иВыделяем ячейку, в которой одна строка с ячейки столбца. а затем найти другой подобной системы, одном листе.
В результате идётSub Удалить_переносы()Алексей,
— всегда в
как именно выглядит ячейке этого символа
1 To SearchRange.Cells.Count Range, Condition As
используя функцию СИМВОЛ,
рисунке с гистограммой,«ТЕКСТ2» текст выходит за числами, текстом илиПо желанию, можете заменить лишние начальные или то готовьтесь кУдаляем переносы строк при ошибка:Cells.Replace What:=Chr(10), Replacement:=»»,в 2007 и таких случаях пресоздаю этот знак? Пробовала
на пробел будет
If SearchRange.Cells(i) Like String) Dim Delimeter мы имеем возможность созданной в программе
нужно подставить слова пределы границ. Кликаем другими данными. Но, исходный столбец новым,
конечные пробелы, или встрече только с помощи формул иCompile error:
LookAt:=xlPart, SearchOrder _ в 2000 работает. файл на основе из форда вставлять выглядеть примерно так: Condition Then If As String, i вставить любой символ Excel. Подписи оси или наборы слов, по ней правой
что делать, если с удалёнными переносами
лишние пробелы между
символом перевода строки.
настраиваем таким образомInvalid outside procedure:=xlByRows, MatchCase:=False, SearchFormat:=False,
Попробуй ввести аб таких опусов. За — не понимаетActiveCell = Replace(ActiveCell.Text, MergeIf <> Empty As Long Delimeter в формулу Excel. X содержат имена которые хотите перенести.
кнопкой мыши. В нужно перенести текст строк: словами.
Плюсы: комплексную обработку текстовыхВ справке пока ReplaceFormat:=False
(буква перед и одно избавляюсь от его эксель. Chr(10), » «) Then MergeIf = = «, « У выше описанном продавцов и данные
Остальные символы формулы открывшемся списке выбираем в пределах однойВыделите все ячейки в
В некоторых случаях переносыЭтот способ самый данных в ячейках. ответа не нашёл.End Sub{/post}{/quote} буква после), чтобы
кучи сопутствующих проблем…Короче, не сталаIgor_Tr MergeIf & TextRange.Cells(i)
‘символы-разделители (можно заменить примере вставлен символ о продажах. Такой изменять не нужно. пункт ячейки на другую столбце строк необходимо удалять,
быстрый.Используем макрос VBA, чтобы
В любом случае,макрос отлично работает, нагляднее было.Анель мучаться, быстренько сделала: Заработалааа!! А можно
& vbCrLf Else на пробел или
переноса строки, который пример подписи данныхДля того, чтобы результат«Формат ячеек…» строку? Данную задачуC чтобы в дальнейшемМинусы:
очистить от переносов
всем спасибо за есть одно небольшоеZVI: Супер !!!! Макрос коротенький макрос подсказать, символ чего
MergeIf = TextRange.Cells(i) ; и т.д.) соединен с обеих на гистограмме всегда отобразился на листе,. можно выполнить, воспользовавшисьи нажатием использовать текст вНикаких дополнительных плюшек строк несколько рабочих подсказку. НО! он не
: Алексей (Казанский), а работает. 5 секSub Удалить_переносы() Ch(7). Спасибо еще & vbCrLf End ‘если диапазоны проверки
сторон оператором & пригодиться, когда текст нажмите кнопкуОткрывается окно форматирования. Переходим некоторыми возможностями программы.Ctrl+C качестве аргументов функций,Вот так можно удалить книг.mouse сохраняет пробел.. я тогда этого
и все готовоCells.Replace What:=Chr(10), Replacement:=»», раз! If End If и склеивания не
между значениями ячеек должен компактно расположитьсяEnter во вкладку
Давайте разберемся, какскопируйте данные в
не внося изменения
переносы строк при
Замечание:: У меня работаетИванов
не знал, иsvetlanav LookAt:=xlPart, SearchOrder _Все! Наверно, мозги Next i End
равны друг другу A2 и C2.
так, чтобы не
на клавиатуре.
«Выравнивание» сделать перевод строки
буфер обмена. в исходные ячейки.
помощи инструмента «
Первоначально термины «Возврат такИван Иванович вообще Excel стал
: как приятно, когда
:=xlByRows, MatchCase:=False, SearchFormat:=False,
закипели. Ch(7) -
Function
— выходим сЕсли в ячейке не
затенять элементы гистограммы.Главным недостатком данного способа. В блоке настроек в ячейке вДалее выделите ячейку
Результат можно использовать,Найти и заменить
каретки» и «ПереводSub test()получается воспринимать только с
мои кривоватые куски ReplaceFormat:=False это вставка символа,Kuzmich ошибкой If SearchRange.Count включен режим «Перенести
Секрет данного решения весьма является тот факт,«Отображение»
Excel.B2 например, как аргумент
»: строки» использовались приCells.Replace What:=Chr(10), Replacement:=»»,
ИвановИван Иванович…
8-й версии, до кода кому-то помогают))
End Sub
верхней жирной точки.: В ячейке включить <> TextRange.Count Then
текст», то наличие прост и элементарен. что он сложнеевыбираем параметр
Скачать последнюю версию, нажмите сочетание клавиш
функцииВыделите все ячейки, в
работе на печатных LookAt:=xlPart
есть рецепт? заранее
него мне большеZVI
Z Пошел пить пиво!!!
перенос по словам
MergeIf = CVErr(xlErrRef)
символа переноса строки Просто необходимо добавить в выполнении, чем«Переносить по словам» Excel
Shift+F10ПРОСМОТР которых требуется удалить
машинках и обозначали
End Sub спасибо!
нравился пакет Framework-IV
planetaexcel.ru
: Может кому-нибудь пригодится
Уважаемые форумчане!
Перерыл весь рунет, а ответа на свой вопрос не нашел. Обращаюсь за помощью к вам…
Дело вот в чем — столкнулся с необходимостью сделать следующее:
На Лист 1 ежедневно заполняются ячейки C5-K8. В строке Итог (C10-K10) ФОРМУЛАМИ производится необходимый расчет. Так вот я никак не могу добиться того, чтобы при нажатии на кнопку Сформировать, данные (именно ЧИСЛА, а не ФОРМУЛЫ)
скопировались в НОВУЮ строку на Лист 2 в сводную ежедневную таблицу. Т.е. смысл какой — оператор ежедневно на Лист 1 вводит новые данные и нажимает кнопку Сформировать. При этом рассчитанные ЦИФРЫ из строки Итог должны заноситься на Лист 2 в НОВУЮ строку (т.е. должна добавляться новая строка в конец существующей таблицы). В результате мы на Лист 2 получим таблицу со строками данных за каждый день (типа статистика). Понимаю что надо кнопке присвоить макрос который это будет делать. Сам в VB не силен, вот и прошу помощи у Гуру. Самому никак не удалось решить задачу. Файл прилагается. Заранее благодарен за любую инфу по данному вопросу.
Хитрости »
1 Май 2011 403854 просмотров
Очень часто при внесении данных на лист Excel возникает вопрос определения последней заполненной или первой пустой ячейки. Чтобы впоследствии с этой первой пустой ячейки начать заносить данные. В этой теме я опишу несколько способов определения последней заполненной ячейки.
В качестве переменной, которой мы будем присваивать номер последней заполненной строки, у нас во всех примерах будет lLastRow. Объявлять мы её будем как Long. Для экономии памяти можно было бы использовать и тип Integer, но т.к. строк на листе может быть больше 32767(это максимальное допустимое значение переменных типа Integer) нам понадобиться именно Long, во избежание ошибки. Подробнее про типы переменных можно прочитать в статье Что такое переменная и как правильно её объявить
Одинаковые переменные для всех примеров
Во всех примерах ниже мы будем запоминать номер последней строки или столбца в одни и те же переменные:
Dim lLastRow As Long 'а для lLastCol можно было бы применить и тип Integer, 'т.к. столбцов в Excel пока меньше 32767, но для однообразности назначим тоже Long Dim lLastCol As Long
Способ 1:
Определение
последней заполненной строки
через свойство End
lLastRow = Cells(Rows.Count,1).End(xlUp).Row 'или lLastRow = Cells(Rows.Count, "A").End(xlUp).Row
1 или «A» — это номер или имя столбца, последнюю заполненную ячейку в котором мы определяем. По сути обе приведенные строки дадут абсолютно одинаковый результат. Просто иногда удобнее указать номер столбца, а иногда его имя. Поэтому использовать можно любой из приведенных вариантов, в зависимости от ситуации.
Определение последнего столбца через свойство End
lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column
1 — это номер строки, последнюю заполненную ячейку в которой мы определяем.
Данный метод определения последней строки/столбца самый распространенный. Используя его мы можем определить последнюю ячейку только в одном конкретном столбце(или строке). В большинстве случаев этого более чем достаточно.
Метод основан именно на принципе работы свойства End. На примере поиска последней строки опишу принцип так, как бы мы это делали руками через выделение ячеек на листе:
- выделили самую последнюю ячейку столбца А на листе(для Excel 2007 и выше это А1048576, а для Excel 2003 — А65536)
- и выполнили переход вверх комбинацией клавиш Ctrl+стрелка вверх. Данная комбинация заставляет Excel двигаться вверх(если точнее, то в направлении стрелки, нажатой вместе с Ctrl) до тех пор, пока не встретиться первая ячейка с формулой или значением. А в случае, если сочетание было вызвано из уже заполненных ячеек — то до первой пустой. И как только Excel доходит до этой ячейки — он её выделяет
- А через свойство .Row мы просто получаем номер строки этой выделенной ячейки
Нюансы:
- даже если в ячейке нет видимого значения, но есть формула — End посчитает ячейку не пустой. С одной стороны вполне справедливо. Но иногда нам надо определить именно «визуально» заполненные ячейки. Поиск ячеек при подобных условиях будет описан ниже(Способ 4: Определение последней ячейки через метод Find)
- если на листе заполнены все строки в просматриваемом столбце(или будут заполнены несколько последних ячеек столбца или даже только одна последняя) — то результат может быть неверный(ну или не совсем такой, какой ожидали)
- Данный способ игнорирует строки, скрытые фильтром, группировкой или командой Скрыть (Hide). Т.е. если последняя строка таблицы будет скрыта, то данный метод вернет номер последней видимой заполненной строки, а не последней реально заполненной.
Ну а если надо получить первую пустую ячейку на листе(а не первую заполненную) — придется вспомнить математику. Т.к. последнюю заполненную мы определили, то первая пустая — следующая за ней. Т.е. к результату необходимо прибавить 1. Это хоть и очевидно, но на всякий случай все же лучше об этом напомнить.
Способ 2:
Определение
последней заполненной строки
через SpecialCells
lLastRow = Cells.SpecialCells(xlLastCell).Row
Определение последнего столбца через SpecialCells
lLastCol = Cells.SpecialCells(xlLastCell).Column
Данный метод не требует указания номера столбца и возвращает последнюю ячейку(Row — строку, Column — столбец).
Если хотите получить номер первой пустой строки или столбца на листе — к результату необходимо прибавить 1.
Нюансы:
- Используя данный способ следует помнить, что не всегда можно получить реальную последнюю заполненную ячейку, т.е. именно ячейку со значением. Метод SpecialCells определяет самую «дальнюю» ячейку на листе, используя при этом механизм «запоминания» тех ячеек, в которых мы работали в данном листе. Т.е. если мы занесем в ячейку AZ90345 значение и сразу удалим его — lLastRow, полученная через SpecialCells будет равна значению именно этой ячейки, из которой вы только что удалили значения(т.е. 90345). Другими словами требует обязательного обновления данных, а этого можно добиться только сохранив файла, а временами даже только закрыв файл и открыв его снова. Так же, если какая-либо ячейка содержит форматирование(например, заливку), но не содержит никаких значений, то метод SpecialCells посчитает её используемой и будет учитывать как заполненную.
Этот недостаток можно попробовать обойти, вызвав перед определением последней ячейки вот такую строку кода:With ActiveSheet.UsedRange: End With
Это должно переопределить границы рабочего диапазона и тогда определение последней строки/столбца сработает как ожидается, даже если до этого в ячейке содержались данные, которые впоследствии были удалены.
Выглядеть в единой процедуре это будет так:Sub GetLastCell() Dim lLastRow As Long 'переопределяем рабочий диапазон листа With ActiveSheet.UsedRange: End With 'ищем последнюю заполненную ячейку на листе lLastRow = Cells.SpecialCells(xlLastCell).Row End Sub
- даже если в ячейке нет видимого значения, но есть формула — SpecialCells посчитает ячейку не пустой
- Данный метод определения последней ячейки не будет работать на защищенном листе(Рецензирование(Review) —Защитить лист(Protect Sheet)).
- Данный метод не будет работать при использовании внутри UDF. Точнее будет работать не так, как ожидается. Подробнее про некоторые «баги» работы встроенных методов внутри UDF(функций пользователя) я описывал в этой статье: Глюк работы в UDF методов SpecialCells и FindNext
Сам же я этот метод обычно использую для определения последней ячейки в только что созданном файле, в котором только добавляю строки кодом и в котором не может быть описанных выше нюансов.
Способ 3:
Определение последней строки через UsedRange
lLastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
Определение последнего столбца через UsedRange
lLastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
НЕМНОГО ПОЯСНЕНИЙ:
- ActiveSheet.UsedRange.Row — этой строкой мы определяем первую ячейку, с которой начинаются данные на листе. Важно понимать для чего это — если у вас первые строк 5 не заполнены ничем(т.е. самые первые данные заносились начиная с 6-ой строки листа), то ActiveSheet.UsedRange.Row вернет именно 6(т.е. номер первой строки с данными). Если же все строки заполнены — то вернет 1.
- ActiveSheet.UsedRange.Rows.Count — определяем кол-во строк, входящих в весь диапазон данных на листе. При этом неважно, есть ли данные в ячейках или нет — достаточно было поработать в этих ячейках и удалить значения или просто изменить цвет заливки.
В итоге получается: первая строка данных + кол-во строк с данными — 1. Зачем вычитать единицу? Попробуем посчитать вместе: первая строка: 6. Всего строк: 3. 6 + 3 = 9. Вроде все верно. А теперь выделим на листе три ячейки, начиная с 6-ой. Выделение завершилось на 8-ой строке. Потому что в 6-ой строке уже есть данные. Поэтому и надо вычесть 1, чтобы учесть этот момент. Думаю, не надо пояснять, что если надо получить первую пустую ячейку — можно 1 не вычитать - То же самое и с ActiveSheet.UsedRange.Column, только уже не для строк, а для столбцов.
Нюансы:
- Обладает некоторыми недостатками предыдущего метода. Определяет самую «дальнюю» ячейку на листе, используя при этом механизм «запоминания» тех ячеек, в которых мы работали в данном листе. Следовательно попробовать обойти этот момент можно точно так же: перед определением последней строки/столбца записать строку: With ActiveSheet.UsedRange: End With
Это должно переопределить границы рабочего диапазона и тогда определение последней строки/столбца сработает как ожидается, даже если до этого в ячейке содержались данные, которые впоследствии были удалены. - даже если в ячейке нет видимого значения, но есть формула — UsedRange посчитает ячейку не пустой
Однако метод через UsedRange.Row работает прекрасно и при установленной на лист защите и внутри UDF, что делает его более предпочтительным, чем метод через SpecialCells при равных условиях.
Способ 4:
Определение последней строки и столбца, а так же адрес ячейки методом Find
Sub GetLastCell_Find() Dim rF As Range Dim lLastRow As Long, lLastCol As Long 'ищем последнюю ячейку на листе, в которой хранится хоть какое-то значение Set rF = ActiveSheet.UsedRange.Find(What:="*", LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious, MatchCase:=False, MatchByte:=False) If Not rF Is Nothing Then lLastRow = rF.Row 'последняя заполненная строка lLastCol = rF.Column 'последний заполненный столбец MsgBox rF.Address 'показываем сообщение с адресом последней ячейки Else 'если ничего не нашлось - значит лист пустой 'и можно назначить в качестве последних первую строку и столбец lLastRow = 1 lLastCol = 1 MsgBox "A1" 'показываем сообщение с адресом ячейки А1 End If End Sub
Этот метод, пожалуй, самый оптимальный в случае, если надо определить последнюю строку/столбец на листе без учета форматов и формул — только по отображаемому значению в ячейке. Например, если на листе большая таблица и последние строки заполнены формулами, возвращающими при определенных условиях пустую ячейку(=ЕСЛИ(A1>0;1;»»)), предыдущие варианты вернут строку/столбец ячейки с последней ячейкой, в которой формула. В то время как данный метод вернет адрес ячейки только в случае, если в ячейке реально отображается какое-то значение. Такой подход часто используется для того, чтобы определить границы данных для последующего анализа заполненных данных, чтобы не захватывать пустые ячейки с формулами и не тратить время на их проверку.
Здесь следует обратить внимание на параметры метода Find. В данном случае мы специально указываем искать по значениям, а не по формулам:
Set rF = ActiveSheet.UsedRange.Find(What:=»*», LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious, MatchCase:=False, MatchByte:=False)
Нюансы:
- Метод Find, вызванный с листа или другим кодом, имеет свойство запоминать все параметры последнего поиска, а если поиск еще не вызывался — то применяются параметры по умолчанию. А по умолчанию поиск идет всегда по формулам. Поэтому я настоятельно рекомендую указывать принудительно все необходимые параметры, как в примере.
- Метод Find не будет учитывать в просмотре скрытые строки и столбцы. Это следует учитывать при его применении.
Пара небольших практических кодов
Коды ниже могут помочь понять, как использовать приведенные выше строки кода по поиску последней ячейки/строки:
Sub GetLastCell() Dim lLastRow As Long Dim lLastCol As Long 'определили последнюю заполненную ячейку с учетом формул в столбце А lLastRow = Cells(Rows.Count, 1).End(xlUp).Row MsgBox "Заполненные ячейки в столбце А: " & Range("A1:A" & lLastRow).Address 'определили последний заполненный столбец на листе(с учетом формул и форматирования) lLastCol = Cells.SpecialCells(xlLastCell).Column MsgBox "Заполненные ячейки в первой строке: " & Range(Cells(1, 1), Cells(1, lLastCol)).Address 'выводим сообщение с адресом последней ячейки на листе(с учетом формул и форматирования) MsgBox "Адрес последней ячейки диапазона на листе: " & Cells.SpecialCells(xlLastCell).Address End Sub
Выделяем диапазон ячеек в столбцах с А по С, определяя последнюю ячейку по столбцу A этого же листа:
Sub SelectToLastCell() Range("A1:C" & Cells(Rows.Count, 1).End(xlUp).Row).Select End Sub
Копируем ячейку B1 в первую пустую ячейку столбца A этого же листа:
Sub CopyToFstEmptyCell() Dim lLastRow As Long lLastRow = Cells(Rows.Count, 1).End(xlUp).Row 'определили последнюю заполненную ячейку Range("B1").Copy Cells(lLastRow+1, 1) 'скопировали В1 и вставили в следующую после определенной ячейки End Sub
А код ниже делает тоже самое, но одной строкой — применяется Offset и используется тот факт, что изначально методом End мы получаем именно ячейку, а не номер строки(номер строки мы получаем позже через свойство .Row):
Sub CopyToFstEmptyCell() Range("B1").Copy Destination:=Cells(Rows.Count, 1).End(xlUp).Offset(1) End Sub
Range(«B1»).Copy — копирует ячейку В1. Если для аргумента Destination указать другую ячейку, то в неё будет вставлена скопированная ячейка. Мы передаем в этот аргумент определенную методом End ячейку
Cells(Rows.Count, 1).End(xlUp) — возвращает последнюю заполненную ячейку в столбце А (не строку, а именно ячейку)
Offset(1) — смещает полученную ячейку на строку вниз
Используем инструмент автозаполнение(протягивание) столбца В, начиная с ячейки B2 и определяя последнюю ячейку для заполнения на основании столбца А
Sub AutoFill_B() Dim lLastRow As Long lLastRow = Cells(Rows.Count, 1).End(xlUp).Row Range("B2").AutoFill Destination:=Range("B2:B" & lLastRow) End Sub
На самом деле практических кодов может быть куда больше, т.к. определение последней заполненной или первой пустой ячейки является чуть ли не самой распространенной задачей при написании кодов в Excel.
Так же см.:
Как получить последнюю заполненную ячейку формулой?
Как определить первую заполненную ячейку на листе?
Что такое переменная и как правильно её объявить?
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика