Разрыв строки Vba Excel
Обновлено: 20.11.2024
Во время написания кода вы можете иногда создавать длинные операторы, требующие горизонтальной прокрутки в редакторе кода. Хотя это не влияет на то, как работает ваш код, вам или кому-либо другому будет сложно читать код, отображаемый на мониторе. В таких случаях следует рассмотреть возможность разбиения одного длинного оператора на несколько строк.
Чтобы разбить один оператор на несколько строк
Используйте символ продолжения строки, который представляет собой знак подчеркивания ( _ ), в том месте, где вы хотите, чтобы строка прерывалась. Перед символом подчеркивания должен стоять пробел, за которым следует знак конца строки (возврат каретки) или (начиная с версии 16.0) комментарий, за которым следует возврат каретки.
В некоторых случаях, если опустить символ продолжения строки, компилятор Visual Basic неявно продолжит оператор на следующей строке кода. Список элементов синтаксиса, для которых можно опустить символ продолжения строки, см. в разделе «Неявное продолжение строки» в разделе Операторы.
В следующем примере инструкция разбита на четыре строки с символами продолжения строки, завершающими все строки, кроме последней.
Использование этой последовательности упрощает чтение кода как в Интернете, так и при печати.
Символ продолжения строки должен быть последним символом в строке. Вы не можете следовать за ним с чем-либо еще в той же строке.
Существуют некоторые ограничения в отношении того, где можно использовать символ продолжения строки; например, вы не можете использовать его в середине имени аргумента. Вы можете разбить список аргументов с помощью символа продолжения строки, но отдельные имена аргументов должны остаться нетронутыми.
Вы не можете продолжить комментарий, используя символ продолжения строки. Компилятор не проверяет символы в комментарии на наличие специального значения. Для многострочного комментария повторяйте символ комментария ( ' ) в каждой строке.
Хотя размещение каждого оператора в отдельной строке является рекомендуемым методом, Visual Basic также позволяет размещать несколько операторов в одной строке.
Выравнивание предложения очень важно для того, чтобы донести правильное сообщение до пользователей или читателей. Чтобы сделать предложение правильным, мы используем «новый абзац» или новую строку в качестве одного из приемов, и это обычно происходит в документе Word. Если у вас есть этот вопрос, эта статья развеет ваши опасения. Прочтите эту статью полностью, чтобы узнать о новой строке в VBA.
В Excel, когда мы хотим вставить символ новой строки, мы либо нажимаем Ctrl + Enter, чтобы вставить новый разрыв строки, либо используем функцию CHR с 10. В программировании VBA использование разделителей новой строки почти неизбежно. составлять предложения. Но вопрос в том, как мы можем вставить новый разделитель строк VBA?
Как вставить новую строку в MsgBox VBA?
Я видел людей, использующих несколько способов вставки новой строки в VBA. Помня обо всем этом, я решил подробно показать вам каждый из них в этой статье.
Прежде чем я покажу вам, как вставить новую строку в VBA, позвольте мне показать вам, почему вам нужно вставлять строки в VBA. Например, посмотрите на изображение ниже.
Предположим, вы посмотрите на два изображения выше, одно из которых выглядит аккуратно и чисто. Оба передают одно и то же сообщение, но взгляните на оба изображения. Вы сами решаете, что лучше для вас, и продолжаете читать, чтобы изучить второе изображение.
Как следует из названия, новая строка будет вставлена между предложениями или символами. Например, посмотрите на приведенный ниже код.
Код:
В приведенном выше коде есть два предложения. Первый: «Привет, добро пожаловать на форум VBA. И второй: «Мы покажем вам, как вставить новую строку в эту статью».
Выше показаны эти предложения в одну строку, только как на изображении ниже.
Когда предложения слишком большие, это часто создает двусмысленность в сознании читателей или выглядит некрасиво, и читатели вообще не хотят читать.
Чтобы избежать всего этого, мы можем отображать сообщение в две строки вместо строки по умолчанию. После первой строки предложения закрывает двойные кавычки и ставит символ амперсанда (&).
Код:
После того, как символ амперсанда (&) нажмет пробел, вы получите константу VBA «vbNewLine».
Код:
После константы "vbNewLine" еще раз нажмите пробел и добавьте символ амперсанда (&).
Код:
После второго символа амперсанда (&) введите еще один пробел, добавьте следующее строковое предложение в двойные кавычки.
Код:
Хорошо, мы сделали. Запустите код, чтобы увидеть два предложения в двух строках.
Код:
Выше выделенные жирным шрифтом и подчеркнутые слова будут вставлять два разрыва строки между предложениями, и результат будет таким, как показано ниже.
Код:
Мы также можем использовать константы «vbCrLf, vbCr, vbLf», чтобы вставить новый разделитель строк. Ниже приведены примеры того же.
Код:
Код:
Код:
Вы можете скачать этот VBA New Line Excel здесь. Шаблон Excel с новой строкой VBA
Рекомендуемые статьи
Это руководство по VBA New Line. Здесь мы узнали, как вставить новую строку в MsgBox VBA, используя «vbNewLine», «Char (10)» и «vbCrLf, vbCr, vbLf», чтобы вставить новый разделитель строк вместе с практическими примерами и загрузить шаблон Excel. Ниже приведены некоторые полезные статьи Excel, связанные с VBA –
В этом учебном пособии по Excel VBA объясняется, как разделить данные разрыва строки на разные строки.
Вы также можете прочитать:
Excel VBA разделяет данные разрыва строки на разные строки
Недавно я получил отчет из системы управления персоналом, который, как утверждается, является стандартным отчетом. В отчете некоторые данные сгруппированы в одну ячейку и разделены разрывом строки.
Я нашел этот формат отчета совершенно неприемлемым. С точки зрения базы данных каждый зависимый объект должен храниться как отдельная запись, а не в одной записи. Проблема с отчетом такого типа заключается в том, что вы не можете выполнять VLookup, поэтому необходимо разделить эти сгруппированные данные на отдельные строки.
Код VBA — отдельные данные разрыва строки
Объяснение кода VBA — отдельные данные разрыва строки
Во-первых, пользователь определяет, какой столбец содержит разрыв строки. Существует несколько типов разрыва строки
1) возврат каретки — vbCr
2) перевод строки – vbLf
3) возврат каретки + перевод строки — vbCrLf
В моем примере я использовал vbLf. Макрос проходит через первую ячейку (B1) определенного столбца до последней ячейки (B5). Если какая-либо ячейка содержит разрыв строки, она копирует всю строку и вставляет новую строку. При вставке новой строки последняя ячейка диапазона цикла также изменяется.
Наконец измените значение ячейки верхней строки на значение ячейки до первого разрыва строки, а нижнюю ячейку замените на значение ячейки после первого разрыва строки. То же самое повторяется вниз по ячейке.
Код VBA — отдельные данные разрыва строки (несколько столбцов)
В качестве примера возьмем приведенную выше зависимую таблицу.
Если есть еще один столбец с именем Идентификатор зависимости, идентификатор для идентификации каждого зависимого (отношение один к одному с Зависимым), то мой предыдущий макрос не будет работать.
Для разделения на несколько столбцов можно использовать приведенный ниже макрос. Обратите внимание, что те столбцы, которые вы хотите разделить, должны иметь отношение один к одному. Например, если в ячейке B2 есть два имени, то в ячейке D2 должно быть два соответствующих значения.
Результат
Разрыв строки на основе других символов
Если вы хотите разбить строку на основе других символов вместо пробела, определите свой собственный разделитель, используя приведенный ниже код. В приведенном ниже примере строка разбивается двоеточием.
Исходящие ссылки
9 мыслей о «Разделение данных разрыва строки в Excel VBA на разные строки»
Спасибо за эту статью. Это было спасением. Был передан файл из 23 000 строк с несколькими CR в одном столбце. Это сделало за 1 минуту то, что заняло бы несколько дней, поскольку функция замены не работала.
Как обновить код, чтобы применить это сразу к нескольким столбцам?
Вернее, как мне обновить этот код, чтобы он работал для диапазона в таблице?
Привет, Джордан! Я обновил свой пост в ответ на ваш вопрос, надеюсь, он поможет
Здравствуйте! Ваш код почти сработал для моей ситуации, но не совсем. Возможно, вы можете помочь?
У меня есть 11 столбцов (от A до K) и 44 000 строк данных, в которых есть целые строки с разрывами строк, вкрапленными в мои данные. Когда я сталкиваюсь со строкой со всеми разрывами строк, мне кажется, что эта строка должна быть идеально разделена на две строки, поэтому существует отношение один к одному со всеми одиннадцатью столбцами в этих случайных строках.
В вашем коде я добавил все столбцы (а не только B и D), но это почему-то не сработало.
Дополнительным неудобством является то, что эти случайные строки разрыва строки имеют различное форматирование данных, где перед числом (т. е. перед текстом) стоит несколько нулей. Я не уверен, может ли это быть связано с кодом VBA или нет.
Если нужно, у меня есть скриншот.
Заранее благодарим за любую помощь, которую вы можете оказать!!
Здравствуйте, Николь! Предоставьте сценарий в рабочей тетради, где мой код не работает, чтобы я мог посмотреть
У меня ситуация, похожая на описанную выше Николь, и я получаю сообщение об ошибке при попытке запустить код. Я получаю сообщение "Ошибка времени выполнения "5": недопустимый вызов процедуры или аргумент" в следующей строке:
upperRng.Value = Mid(currentrng.Value, 1, InStr(currentrng.Value, vbLf) – 1)
Пожалуйста, помогите?
Здравствуйте, Даниэль, не могли бы вы дать мне образец рабочей тетради, чтобы я мог взглянуть
БОЛЬШОЕ СПАСИБО! Я очень долго искал, чтобы найти это! Не могу поверить, что мне пришлось просмотреть 20 результатов Google, прежде чем я нашел этот сайт!
Оставить ответ Отменить ответ
сообщить об этом объявлении
Категории
Архивы
Архив сообщает об этом объявлении
Здравствуйте, в B1 моего документа есть ячейка со строкой. Эта строка выглядит следующим образом:
Все это находится в одной и той же ячейке, только разделенной разрывом строки (нажмите Alt+Enter), но без фактического пробела или чего-то еще. Следующий код разбивает эту строку на несколько ячеек:
sub splittext()
Затемнить str() как строку
Если len(range("b1").value), то
str = VBA.Split(Range("B1").value, vbLf)
range("b1").resize(1, UBound(str) + 1).offset(1,0) = str
Конец, если
Конец подпункта
Теперь у вас будет яблоко в b2, апельсин в c2 и банан в d2.
Мой вопрос: как именно работает линия изменения размера? Я понимаю, что первая строка проверяет, пуста ли ячейка, вторая строка разбивает ее с помощью vbnewline, но я не получаю третью. Какова здесь верхняя граница и в чем смысл изменения размера? Кроме того, как бы я изменил это, чтобы вместо разделения моей ячейки на b2-d2 вместо этого разделить ее на a1-a3?
/u/yankesh — прочитайте этот комментарий полностью.
Прочитайте правила, особенно 1 и 2
После того, как ваша проблема будет решена, ответьте на один или несколько ответов с пометкой "Решение проверено", чтобы закрыть ветку.
Несоблюдение этих шагов может привести к удалению вашего сообщения без предупреждения.
Я бот, и это действие было выполнено автоматически. Пожалуйста, свяжитесь с модераторами этого субреддита если у вас есть какие-либо вопросы или проблемы.
Split принимает строку с разделителями и разделитель в качестве аргументов и возвращает массив
Этот массив основан на 0, т.е.первый индекс равен 0, так что myArray(0) = "a". Следовательно, если в строке с разделителями есть N элементов (4 в этом примере), то UBound(myArray) = 3
Если бы вы поместили этот массив в ячейки, вам потребовалось бы 4 ячейки. или UBound(myArray)+1 ячейки.
Итак, что делает этот код:
Проверьте, имеет ли B1 длину строки. Если верно, продолжить, если нет, завершить if.
Разбивает строку на массив на основе очертаний возврата строки.
Обратите внимание, что размеры массива указаны сверху без диапазона индексов. VBA.Split создаст массив с индексами от 0 до последней записи (в данном случае 3 записи, поэтому от 0 до 2).
.Resize используется для изменения размера диапазона. B1 имеет 1 ячейку. В нашем массиве 3 записи, поэтому нам нужно 3 ячейки. .Resize говорит: «Создайте новый диапазон, состоящий из 1 строки на 3 столбца. Как он достигает 3, берет верхнюю границу массива (2), а затем добавляет 1 (поскольку массив по умолчанию начинается с 0; наш диапазон не может начинаться с нулевого столбца).
Затем .Offset перемещает напечатанный диапазон на 1 строку ниже B1.
Если вы хотите управлять тем, куда записывается диапазон, измените последний B1 на A1, а затем измените смещение с (1,0) на (0,0). Затем измените .Resize с (1, UBound(str) +1) на (UBound(str)+1, 1) . Хотя последнюю часть я еще не тестировал.
Читайте также: