Vba excel разбить ячейки в excel

 

AlexTM

Пользователь

Сообщений: 432
Регистрация: 29.05.2015

Win7SP1 EXL2010 / Win8.1 EXL2016 (VM)

Доброго дня.

Очень интересует, есть ли в VBA встроенная функция, которая бы позволяла проанализировать ячейку на предмет новых строк в ней, то есть когда в одной ячейке записаны сразу три строки (каждая с новой строки), и их надо разделить каждую по своей ячейке?

Заранее благодарю. Пример прикреплен, если на словах не совсем понятно..

Прикрепленные файлы

  • Пример.xlsx (37.39 КБ)

 

AlexTM

Пользователь

Сообщений: 432
Регистрация: 29.05.2015

Win7SP1 EXL2010 / Win8.1 EXL2016 (VM)

Да, прошу прощения, в примере в третьей ячейке забыл выделить еще одну строку… что-то не заметил  :(

Изменено: AlexTM10.07.2015 10:18:41

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#4

10.07.2015 10:21:21

«Новая строка» это символ перевода строки, в VBA есть константа vbLf. Соответственно, можно получить массив строк с помощью

Код
myArr = Split(myCell, vbLf)

Изменено: Казанский10.07.2015 10:22:00

 

AlexTM

Пользователь

Сообщений: 432
Регистрация: 29.05.2015

Win7SP1 EXL2010 / Win8.1 EXL2016 (VM)

А не сильно затруднит показать строчкой кода на примере одной ячейки? :oops: (для чайника)  

 

AlexTM

Пользователь

Сообщений: 432
Регистрация: 29.05.2015

Win7SP1 EXL2010 / Win8.1 EXL2016 (VM)

#6

10.07.2015 10:31:21

На мой способ проверки что-то ругается vba… Ошибка Can’t assign to array :(

Код
Sub Das5()
Dim myCell As Range
Set myCell = Worksheets("Пример").Range("A8")
Dim myArr(0 To 10) As String
myArr = Split(myCell, vbLf)
MsgBox myArr(1)
End Sub

Изменено: AlexTM10.07.2015 10:36:58

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Закомментируйте
Dim myArr(0 To 10) As String
Вы задаете размерность, которая может не совпадать с количеством строк в ячейке (количеством элементов, формируемых в Split)
Без явного определения размерности массив сам подстраивается под диапазон.

 

AlexTM

Пользователь

Сообщений: 432
Регистрация: 29.05.2015

Win7SP1 EXL2010 / Win8.1 EXL2016 (VM)

vikttur, СПАСИБО!!! :excl:

 

V

Пользователь

Сообщений: 5018
Регистрация: 22.12.2012

#9

10.07.2015 10:41:42

оставьте просто Dim myArr остальное в строчке удалите

Код
msgbox "в ячейке" & Ubound(myArr)& " строк(а)"
 

AlexTM

Пользователь

Сообщений: 432
Регистрация: 29.05.2015

Win7SP1 EXL2010 / Win8.1 EXL2016 (VM)

V, просто обращение к элементам массива мне удобнее, так копировать в итоге нужно будет, но все равно спасибо за неравнодушие!

 

AlexTM

Пользователь

Сообщений: 432
Регистрация: 29.05.2015

Win7SP1 EXL2010 / Win8.1 EXL2016 (VM)

#11

10.07.2015 13:58:27

С трудом вымутил вот такой код:

Код
Sub Das89()
Application.ScreenUpdating = False
On Error Resume Next
Dim StartTime As Date, EndTime As Date
StartTime = Timer
Dim myCell As Range
Dim n As Byte, m As Byte, i As Byte, j As Byte, Z As Byte
For n = 1 To 85
    For m = 1 To 3
        If m = 1 Then Z = 4 Else If m = 2 Then Z = 5 Else If m = 3 Then Z = 7 Else
        j = 0
        For i = 1 To Z - 2
                Set myCell = Worksheets("Пример").Cells(n, m)
                myArr = Split(myCell, vbLf)
                If m = 1 Then Cells(n, i + Z) = myArr(j) Else
                    If m = 2 Then Cells(n, i + Z + 1) = myArr(j) Else
                        If m = 3 Then Cells(n, i + Z + 2) = myArr(j) Else
                    j = j + 1
        Next i
    Next m
Next n
Application.ScreenUpdating = True
EndTime = Timer
MsgBox Format(EndTime - StartTime, "0.0")
End Sub

НО он ОЧЕНЬ долго работает. В таблице больше 27-ми тысяч строк, время выполнения будет порядка 8-ми часов. Можно что-то упростить? :(

Есть подозрение, что это из-за постоянной перезаписи массива… Как бы это упростить…

Изменено: AlexTM10.07.2015 14:00:34

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#12

10.07.2015 14:10:01

попробуйте…

Код
Sub ik()
  Dim arIn(), arOut()
  With Sheets("Пример")
    arIn = .Range(.[a8], .Cells(.Rows.Count, "a").End(xlUp).Offset(, 2)).Value
    ReDim arOut(1 To UBound(arIn), 1 To 9)
    For i = 1 To UBound(arIn)
      x = Split(arIn(i, 1), vbLf)
      For j = 0 To UBound(x): arOut(i, 1 + j) = x(j): Next
      x = Split(arIn(i, 2), vbLf)
      For j = 0 To UBound(x): arOut(i, 3 + j) = x(j): Next
      x = Split(arIn(i, 3), vbLf)
      For j = 0 To UBound(x): arOut(i, 6 + j) = x(j): Next
    Next
    .[d8].Resize(UBound(arOut), UBound(arOut, 2)).Value = arOut
  End With
End Sub

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

у меня 100 строк обработалось за 0,17сек.

0,17/100*27000 = 46 сек.
надеюсь, приемлемо.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

AlexTM

Пользователь

Сообщений: 432
Регистрация: 29.05.2015

Win7SP1 EXL2010 / Win8.1 EXL2016 (VM)

ikki, честно, вообще ничего не понял из Вашего кода, но он работает!!! Мой — это просто какая-то медуза…
Не могли бы написать краткие комментарии по строкам, что там делается? (Я второй третий день VBA сижу изучаю, образования соответствующего не имею, потому и прошу :) )

В любом случае, безмерно благодарен!  :excl: :excl: :idea:

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

гм… ну посмотрите…
там комментировать особо нечего.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

AlexTM

Пользователь

Сообщений: 432
Регистрация: 29.05.2015

Win7SP1 EXL2010 / Win8.1 EXL2016 (VM)

ikki, спасибо-спасибо, буду изучать-учиться! Спасибо! :idea:

 

Andych

Пользователь

Сообщений: 242
Регистрация: 29.12.2012

#17

10.07.2015 18:38:22

Формулы немного медленнее.

Использование функции Split в VBA Excel, ее синтаксис и параметры. Значения, возвращаемые функцией Split. Примеры использования.

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

Синтаксис функции

Split (Expression,[Delimiter],[Limit],[Compare])

Обязательным параметром функции Split является Expression. Если остальные параметры явно не указаны, используются их значения по умолчанию.

Параметры функции

Параметр Описание Значение
по умолчанию
Expression Строка, содержащая подстроки и разделители Нет
Delimiter Разделитель, представляющий один или более символов Пробел
Limit Максимальное число подстрок, на которые должна быть разделена входная строка -1
Compare* Определяет, какое используется сравнение, двоичное — CompareMethod.Binary (0) или текстовое — CompareMethod.Text (1) 0

*Если используется двоичное сравнение (0 или CompareMethod.Binary), функция чувствительна к регистру букв. Если используется текстовое сравнение (1 или CompareMethod.Text), функция не чувствительна к регистру букв.

Возвращаемые значения

Функция Split возвращает одномерный массив с индексацией от нуля, который содержит указанное параметром Limit число подстрок. Чаще всего, функция Split используется со значением параметра Limit по-умолчанию, равному -1, когда возвращаются все найденные в исходной строке подстроки.


Пример 1

Sub Test1()

Dim a() As String

a = Split(«vremya ne zhdet»)

MsgBox a(0) & vbNewLine & a(1) & vbNewLine & a(2)

End Sub

Результат в MsgBox:

vremya
ne
zhdet

В первом примере используются Delimiter и Limit по-умолчанию.


Пример 2

Sub Test2()

Dim a() As String

a = Split(«vremya-ne-zhdet»,«-«, 2)

MsgBox a(0) & vbNewLine & a(1)

End Sub

Результат в MsgBox:

vremya
ne-zhdet

Во втором примере Delimiter = «-«, а Limit = 2.


Для присваивания результатов функции Split используется предварительно объявленный текстовый динамический массив, который можно использовать в строке присваивания с пустыми скобками или без них. В представленных выше примерах массив указан без скобок.

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

При использовании Excel вам может потребоваться разделить текст из одной ячейки на несколько ячеек для некоторых целей. Это руководство разделено на три части: разделенные текстовые ячейки, разделенные ячейки с числами и разделенные ячейки даты. В каждой части представлены разные примеры, которые помогут вам понять, как выполнять задание на разделение при обнаружении одной и той же проблемы.

Содержание: [ Скрывать ]

(Щелкните любой заголовок в оглавлении ниже или справа, чтобы перейти к соответствующей главе.)


1 Разделить текстовые ячейки

Эта часть собирает ситуации, с которыми вы столкнетесь при разделении текстовой ячейки на несколько столбцов, и предоставляет вам соответствующие методы.

Пример # 1 Разделение ячеек запятой, пробелом или другим разделителем (ами)

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

Разделение ячеек по разделителю с помощью функции «Текст в столбцы»

Наблюдения и советы этой статьи мы подготовили на основании опыта команды Текст в столбцы Функция, встроенная в Excel, часто используется для разделения ячеек. Как показано на снимке экрана ниже, чтобы разделить ячейки в столбце «Текстовые строки» запятыми, вы можете применить функцию «Текст в столбцы» следующим образом.

1. Выберите диапазон столбцов, который вы хотите разделить запятыми, щелкните Данные > Текст в столбцы.

2. в Мастер преобразования текста в столбцы — шаг 1 из 3 диалоговое окно, оставьте разграниченный выбран переключатель, а затем щелкните Download кнопку.

3. в Мастер преобразования текста в столбцы — шаг 2 из 3 диалоговом окне укажите разделитель в соответствии с вашими потребностями (в этом случае я проверяю только Запятая флажок), а затем щелкните Download кнопку.

4. В диалоговом окне последнего шага щелкните значок кнопку, чтобы выбрать ячейку для вывода разделенных текстов, а затем нажмите кнопку Завершить кнопку.

Затем текст в выбранном диапазоне разделяется запятой и помещается в разные столбцы, как показано ниже.

Разделить ячейки по разделителю с помощью формулы

Вы можете применить приведенную ниже формулу для разделения текста в ячейках по указанному разделителю в Excel.

Общая формула

=TRIM(MID(SUBSTITUTE(A1,delim,REPT(» «,LEN(A1))),(N-1)*LEN(A1)+1,LEN(A1)))

аргументы

DELIM: Разделитель, используемый для разделения текстовой строки;

A1: Представляет ячейку, содержащую текстовую строку, которую вы разделите;

N: Число, представляющее n-ю подстроку текстовой строки, которую вы разделите.

Затем примените эту формулу.

1. Как показано на скриншоте ниже, сначала вам нужно создать вспомогательную строку с номерами 1, 2, 3 …, расположенными в разных ячейках.

Внимание: Здесь 1, 2, 3 … представляют первую, вторую и третью подстроку текстовой строки.

2. Выберите ячейку под ячейкой с номером 1, скопируйте или введите в нее приведенную ниже формулу и нажмите Enter ключ, чтобы получить первую подстроку текстовой строки. Выберите ячейку результата, перетащите ее Ручка автозаполнения вправо и вниз, чтобы получить другие подстроки. Смотрите скриншот:

=TRIM(MID(SUBSTITUTE($B5,»,»,REPT(» «,LEN($B5))),(D$4-1)*LEN($B5)+1,LEN($B5)))

Внимание: В формуле «,”- это разделитель, используемый для разделения текстовой строки в B5. Вы можете изменить их по своему усмотрению.

Разделяйте ячейки по разделителю с помощью замечательного инструмента

Здесь рекомендую Kutools for ExcelАвтора Разделить клетки функция, которая поможет вам легко разделить ячейки на отдельные столбцы или строки по определенному разделителю в Excel.

1. После установки Kutools for Excel, выберите диапазон, в котором вы хотите разделить текстовые строки, а затем щелкните Кутулс > Слияние и разделение > Разделить клетки.

2. в Разделить клетки диалоговое окно необходимо настроить следующим образом.

2.1) Выбранный диапазон отображается в Разделить диапазон коробку, можете менять по своему усмотрению;

2.2). Тип выберите Разделить на строки or Разделить на столбцы переключатель;

2.3). Разделить на в разделе выберите нужный вам разделитель. Если нужный разделитель не указан в этом разделе, выберите Другое переключатель, а затем введите разделитель в текстовое поле. В этом случае я ввожу запятую в текстовое поле;

2.4) Нажмите OK. Смотрите скриншот:

3. В следующем Разделить клетки диалоговом окне выберите ячейку для вывода подстрок, а затем щелкните OK.

Затем подстроки разделяются на разные столбцы или строки в зависимости от того, что вы указали на шаге 2 выше.

Разделить на столбцы:

Разделить на строки:

Пример # 2 Разделение ячеек на определенную длину

Чтобы разделить текстовую строку на определенную длину, вам могут помочь следующие методы.

Разделите ячейки на определенную длину с помощью функции текста в столбцы

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

Как показано на снимке экрана ниже, чтобы разделить текст в диапазоне B5: B9 на столбцы каждые 3 символа, вы можете сделать следующее.

1. Выберите ячейки, в которых вы хотите разделить текстовые строки.

2. Нажмите Данные > Текст в столбцы.

3. в Мастер преобразования текста в столбцы — шаг 1 из 3 в диалоговом окне выберите фиксированная ширина переключатель и нажмите Download.

4. Затем Шаг 2 из 3 появится диалоговое окно. в Предварительный просмотр данных раздел, щелкните в нужном месте на оси, чтобы создать линию разрыва (линия со стрелкой). После создания всех линий разрыва щелкните значок Download кнопку, чтобы продолжить.

В этом случае я создаю строки разрыва для каждых 3 символов в текстовой строке.

5. В мастере последнего шага выберите ячейку для вывода разделенных текстов, а затем щелкните значок Завершить кнопку.

Теперь текстовые строки в выбранных ячейках разделяются каждые 3 символа, как показано на скриншоте ниже.

Разделите ячейки на определенную длину с помощью удивительного инструмента

Чтобы разделить ячейки на определенную длину в Excel, вы можете применить Разделить клетки особенность Kutools for Excel чтобы сделать это легко.

1. Выберите ячейки текстовой строки, которые вы хотите разделить на определенную длину, нажмите Кутулс > Слияние и разделение > Разделить клетки.

2. в Разделить клетки диалоговое окно необходимо настроить следующим образом.

2.1) Диапазон, выбранный на шаге 1, отображается в Разделить диапазон коробка, при необходимости ее можно поменять;

2.2). Тип раздел, выберите вариант «Разбить на строки» или «Разбить на столбцы» в соответствии с вашими потребностями;

2.3). Разделить на выберите Укажите ширину переключатель, введите число, представляющее длину символа, которая использовалась для разделения текстовой строки. В этом случае я ввожу цифру 3 в текстовое поле;

2.4) Нажмите OK кнопку.

3. В следующем Разделить клетки в диалоговом окне выберите ячейку для размещения разделенных текстов, а затем щелкните OK.

Затем текстовые строки в выбранных ячейках разделяются на определенную длину и помещаются в разные столбцы.

Пример # 3 Разделение ячеек по определенному слову

Как показано на снимке экрана ниже, чтобы разделить текстовые строки в диапазоне B5: B9 одним словом «продажи», вы можете применить формулы, представленные в этом разделе.

Получить подстроку перед определенным словом в ячейке

Применение формулы, основанной на функциях LEFT и FIND, может помочь получить подстроку перед определенным словом в текстовой строке.

Общая формула

=LEFT(A1,FIND(«certain_word», A1)-1)

аргументы

A1: Представляет ячейку, содержащую текстовую строку, которую вы хотите разделить определенным словом;

Определенное_слово: Слово, используемое для разделения текстовой строки. Это может быть ссылка на слово в ячейке или точное слово, заключенное в двойные кавычки;

1. Выберите пустую ячейку, скопируйте или введите в нее формулу ниже и нажмите Enter ключ, чтобы получить подстроку перед определенным словом. Выделите эту ячейку результата и перетащите ее Ручка автозаполнения вниз, чтобы применить формулу к другим ячейкам.

=LEFT(B5,FIND(«sales»,B5)-1)

Получить подстроку после слова в ячейке

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

Общая формула

=TRIM(MID(A1,SEARCH(«certain_word»,A1)+LEN(«certain_word»),255))

аргументы

A1: Представляет ячейку, содержащую текстовую строку, которую вы хотите разделить определенным словом;

Определенное_слово: Слово, используемое для разделения текстовой строки. Это может быть ссылка на слово в ячейке или точное слово, заключенное в двойные кавычки;

1. Выберите пустую ячейку рядом с первой ячейкой результата (D5).

2. Скопируйте или введите в нее формулу ниже и нажмите Enter ключ. Выберите эту ячейку результата, перетащите ее Ручка автозаполнения вниз, чтобы получить другие результаты.

=TRIM(MID(B5,SEARCH(«sales»,B5)+LEN(«sales»),255))

Теперь у вас есть разделение текстовых строк на разные столбцы по целому слову.

Пример # 4 Разделение ячеек по разрыву строки

В этом разделе демонстрируются различные методы, которые помогут вам разделить текстовые ячейки по разрыву строки в Excel.

Разделение ячеек по разрыву строки с помощью функции «Текст в столбцы»

Функцию «Текст в столбцы» можно применить для разделения ячеек по разрыву строки в Excel. Вы можете сделать следующее.

1. Выберите диапазон ячеек, в котором вы хотите разделить текст по разрыву строки.

2. Нажмите Данные > Текст в столбцы.

3. в Мастер преобразования текста в столбцы — шаг 1 из 3 диалогового окна, выберите разграниченный переключатель, а затем нажмите Download;

4. в Шаг 2 из 3 диалоговое окно, снимите отметку с любых существующих Разделители выбор, проверьте Другое флажок, а затем нажмите Ctrl + J ярлык. Вы можете видеть, что в текстовом поле отображается только маленькая точка, а затем в Предварительный просмотр данных поле, тексты разбиваются по разрывам строк. Щелкните значок Download кнопку.

5. В мастере последнего шага выберите целевую ячейку для вывода разделенных текстов, а затем щелкните значок Завершить кнопку.

Затем текст в выбранных ячейках разбивается на разные столбцы переносом строки.

Разделение ячеек по разрыву строки с помощью формулы

Следующие формулы также могут помочь разделить ячейки по разрыву строки в Excel.

Используя тот же пример, что и выше, после разделения вы получите три подстроки в разных столбцах.

Получить подстроку перед первым разрывом строки

Во-первых, мы можем применить формулу, основанную на ЛЕВЫЙ ПОИСК функции для разделения подстроки перед первым разрывом строки в ячейке.

Общая формула

=LEFT(cell, SEARCH(CHAR(10),cell,1)-1)

аргументы

Ячейка: Ячейка текстовой строки, в которой вы хотите разделить подстроку перед первым разрывом строки.

1. Выберите пустую ячейку (в данном случае D5), скопируйте или введите в нее приведенную ниже формулу и нажмите Enter ключ. Выберите ячейку результата и перетащите ее Ручка автозаполнения вниз, чтобы получить подстроки до первого разрыва строки других ячеек.

= ЛЕВЫЙ (B5; ПОИСК (СИМВОЛ (10); B5,1) -1)

Получить подстроку между первой и второй разрывами строки

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

Общая формула

=MID(cell,SEARCH(CHAR(10),cell)+1,SEARCH(CHAR(10),cell,SEARCH(CHAR(10),cell)+1)-SEARCH(CHAR(10),cell)-1)

аргументы

Ячейка: Ячейка текстовой строки, в которой вы хотите разделить подстроку между первой и второй разрывами строки.

1. Выберите ячейку (E5) рядом с D5, скопируйте или введите в нее приведенную ниже формулу и нажмите Enter ключ. Выберите ячейку результата и перетащите ее Ручка автозаполнения вниз, чтобы получить подстроки между первой и второй разрывами строк других ячеек.

= MID (B5; ПОИСК (СИМВОЛ (10); B5) + 1, ПОИСК (СИМВОЛ (10), B5, ПОИСК (СИМВОЛ (10), B5) +1) — ПОИСК (СИМВОЛ (10), B5) — 1 )

Получить подстроку после второго разрыва строки

Первый шаг — получить подстроку после второго разрыва строки с помощью приведенной ниже формулы.

Общая формула

=RIGHT(cell,LEN(cell) — SEARCH(CHAR(10),cell, SEARCH(CHAR(10), cell) + 1))

аргументы

Ячейка: Ячейка текстовой строки, в которой вы хотите разделить подстроку после второго разрыва строки.

1. Выберите ячейку (в данном случае F5), скопируйте или введите в нее приведенную ниже формулу и нажмите Enter ключ. Выберите ячейку результата и перетащите ее дескриптор автозаполнения вниз, чтобы получить подстроки после второго разрыва строки других ячеек.

= ВПРАВО (B5; LEN (B5) — ПОИСК (СИМВОЛ (10), B5, ПОИСК (СИМВОЛ (10), B5) + 1))

Разделение ячеек по разрыву строки с помощью VBA

В этом разделе представлен код VBA, который поможет вам легко разделить текст в выбранных ячейках по разрыву строки в Excel.

1. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте приведенный ниже VBA в окно кода.

Код VBA: разделение ячеек по разрыву строки в Excel

Sub ExtendOffice_SplitRangeTex()
'Updated by Extendoffice 20211116
Dim xStr() As String
Dim xRg As Range
Dim xCell As Range
Dim xI As Integer
Set xRg = Application.InputBox("Please select the range of cells where you want to split by line break:", "Kutools for Excel", "", , , , , 8)
If xRg Is Nothing Then Exit Sub
For xI = 1 To xRg.Count
    Set xCell = xRg.Item(xI)
    xStr = VBA.Split(xCell.Value, vbLf)
    xCell.Resize(1, UBound(xStr) + 1).Offset(0, 1) = xStr
Next
End Sub

3. нажмите F5 ключ для запуска кода. Потом Kutools for Excel появится диалоговое окно, вам нужно выбрать диапазон ячеек, которые вы хотите разделить по разрыву строки, и, наконец, щелкнуть OK кнопку.

Затем текст в выбранных ячейках разбивается сразу на разные столбцы переносом строки.

Разделяйте ячейки по разрыву строки с помощью замечательного инструмента

Вот удобный инструмент — Разделить клетки полезности Kutools for Excel. С помощью этого инструмента вы можете разделить текст в выбранных ячейках сразу по разрывам строки всего за несколько щелчков мышью.

1. Выберите диапазон ячеек, в котором вы хотите разделить текст по разрыву строки.

2. Нажмите Кутулс > Слияние и разделение > Разделить клетки для включения функции.

3. в Разделить клетки В диалоговом окне необходимо выполнить следующие настройки.

3.1). Разделить диапазон установите флажок, оставьте выбранный диапазон или измените его на новый;

3.2). Тип раздел, выбрать Разделить на строки or Разделить на столбцы в соответствии с вашими потребностями;

3.3). Разделить на раздел, выберите Новая линия переключатель;

3.4) Нажмите OK кнопка. Смотрите скриншот:

4. В следующем всплывающем окне Разделить клетки диалоговом окне выберите пустую ячейку для размещения разделенных текстов и щелкните OK.

Затем текст в выбранных ячейках разбивается на разные столбцы с помощью разрывов строк, как показано на скриншоте ниже.

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

Пример # 5 Разделение ячеек только по первому или последнему разделителю

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

Разделить ячейки по первому разделителю с формулами

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

Разделить подстроку перед первым пробелом

Чтобы разделить подстроку перед первым пробелом, вы можете использовать формулу, основанную на функциях LEFT и FIND.

Общая формула

=LEFT(cell,FIND(«delimiter»,cell)-1)

аргументы

Ячейка: Ячейка текстовой строки, в которой вы хотите разделить подстроку перед первым пробелом.

Разделитель: Разделитель, используемый для разделения ячейки.

1. Выберите ячейку (в данном случае D5) для вывода подстроки, скопируйте или введите в нее приведенную ниже формулу и нажмите клавишу Enter ключ. Выберите ячейку результата и перетащите ее Ручка автозаполнения вниз, чтобы получить подстроку других ячеек.

=LEFT(B5,FIND(» «,B5)-1)

Разделить подстроку после первого пробела

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

Общая формула

=RIGHT(cell,LEN(cell)-FIND(«delimiter»,cell))

аргументы

Ячейка: Ячейка текстовой строки, в которой вы хотите разделить подстроку после первого пробела.

Разделитель: Разделитель, используемый для разделения ячейки.

1. Скопируйте или введите приведенную ниже формулу в ячейку E5 и нажмите Enter ключ для получения результата. Выберите эту ячейку результата и перетащите ее Ручка автозаполнения вниз, чтобы получить подстроку после последнего пробела других ячеек.

=RIGHT(B5,LEN(B5)-FIND(» «,B5))

Внимание: В формулах вы можете изменить ссылку на ячейку на текстовую строку и разделитель в соответствии с вашими потребностями.

Разделить ячейки по последнему разделителю с формулами

Чтобы разделить текст в диапазоне ячеек (B5: B9) на две части по последнему пробелу, как показано на снимке экрана, две формулы, представленные в этом разделе, могут помочь вам в этом.

Получить текст слева от последнего разделителя

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

Общая формула

=LEFT(B5,SEARCH(«^»,SUBSTITUTE(cell,»delimiter»,»^»,LEN(cell)-LEN(SUBSTITUTE(cell,»delimiter»,»»))))-1)

аргументы

Ячейка: Ячейка текстовой строки, в которой вы хотите разделить текст слева от последнего разделителя.

Разделитель: Разделитель, используемый для разделения ячейки.

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

=LEFT(B5,SEARCH(«^»,SUBSTITUTE(B5,» «,»^»,LEN(B5)-LEN(SUBSTITUTE(B5,» «,»»))))-1)

Получите текст справа от последнего разделителя

Теперь нам нужно расположить текст справа от последнего пробела в этом случае.

Общая формула

=TRIM(RIGHT(SUBSTITUTE(cell,»delimiter»,REPT(«delimiter»,LEN(cell))),LEN(cell)))

аргументы

Ячейка: Ячейка текстовой строки, в которой вы хотите разделить текст справа от последнего разделителя.

Разделитель: Разделитель, используемый для разделения ячейки.

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

=TRIM(RIGHT(SUBSTITUTE(B5,» «,REPT(» «,LEN(B5))),LEN(B5)))

Внимание: В формулах вы можете изменить ссылку на ячейку на текстовую строку и разделитель в соответствии с вашими потребностями.

Пример # 6 Разделение ячеек заглавными буквами

В этом разделе представлена ​​пользовательская функция для разделения слов в ячейках заглавными буквами.

1. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, затем скопируйте приведенный ниже код VBA в окно кода.

Код VBA: разделение ячеек заглавными буквами в Excel

Function GetName(s As String, Num As Long) As String
'Updated by Extendoffice 20211116
  With CreateObject("VBSCript.RegExp")
    .Global = True
    .Pattern = "[A-Z][a-z]+|[A-Z]"
    GetName = .Execute(s).Item(Num - 1)
  End With
End Function

3. нажмите другой + Q ключи, чтобы закрыть Microsoft Visual Basic для приложений окно.

4. Выберите ячейку (в данном случае D5), чтобы вывести слово слева от первой заглавной буквы, введите в нее приведенную ниже формулу и нажмите Enter ключ. Выберите эту ячейку результата и перетащите ее Ручка автозаполнения прямо тогда вниз, чтобы получить другие слова.

=IFERROR(GetName($B5,COLUMNS($D:D)),»»)

Внимание: В коде $ B5 — это ячейка, которую вы разделите, $ D: D — столбец ячейки результата. Пожалуйста, измените их в соответствии с вашими данными.

Пример # 7 Разделение имен в ячейках

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

Разделить полное имя на имя и фамилию

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

1) Разделите полное имя на имя и фамилию с помощью формул

Вам нужно применить две формулы отдельно, чтобы разделить полное имя на имя и фамилию.

Разделить имя от полного имени

Вы можете применить формулу, основанную на функциях ВЛЕВО и ПОИСК, чтобы отделить имя от полного имени.

Общая формула

=LEFT(cell, SEARCH(» «, cell) — 1)

1. Выберите ячейку для вывода имени.

2. Скопируйте или введите в нее формулу ниже и нажмите Enter ключ. Выберите эту ячейку результата и перетащите ее Ручка автозаполнения вниз, чтобы отделить имена от других полных имен.

=LEFT(B5, SEARCH(» «, B5) — 1)

Теперь вы разделили все имена из полных имен в указанном диапазоне ячеек, примените приведенную ниже формулу для разделения фамилий.

Разделить фамилию от полного имени

Общая формула

=RIGHT(cell, LEN(cell) — SEARCH(«^», SUBSTITUTE(cell,» «, «^», LEN(cell) — LEN(SUBSTITUTE(cell, » «, «»)))))

1. Выберите ячейку рядом с первой ячейкой имени.

2. Скопируйте или введите в нее формулу ниже и нажмите Enter ключ. Выберите эту ячейку результата и перетащите ее дескриптор автозаполнения вниз, чтобы получить фамилии из других полных имен.

=RIGHT(B5, LEN(B5) — SEARCH(«^», SUBSTITUTE(B5,» «, «^», LEN(B5) — LEN(SUBSTITUTE(B5, » «, «»)))))

Внимание: В формулах B5 — это ячейка с полным именем, которую нужно разделить. Вы можете изменить его по своему усмотрению.

2) Разделите полное имя на имя и фамилию с помощью удивительного инструмента

Многим пользователям Excel сложно запомнить формулу. Здесь рекомендую Разделить имена особенность Kutools for Excel. С помощью этой функции вы можете легко разделить полное имя на имя и фамилию всего несколькими щелчками мыши.

1. Выберите диапазон ячеек с полным именем, нажмите Кутулс > Слияние и разделение > Разделить имена.

2. в Разделить имена диалоговое окно, только отметьте Имя Фамилия коробка в Сплит-типы раздел, а затем щелкните OK.

Tips: Выбранный диапазон отображается в Диапазон для разделения коробка, вы можете изменить ее по мере необходимости.

3. Затем еще один Разделить имена появится диалоговое окно, выберите ячейку назначения и щелкните OK.

Затем полное имя в выбранных ячейках будет разделено на имя и фамилию сразу, как показано на скриншоте ниже.

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

Разделить полное имя на имя, отчество и фамилию

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

1) Разделите полное имя на имя, отчество и фамилию с текстом в столбцы

Встроенная функция Text to Columns может помочь вам легко разделить полное имя на имя, отчество и фамилию в Excel.

Вы можете выполните шаги, упомянутые выше, чтобы применить функцию «Текст в столбцы»..

Внимание: В мастере Шага 2 из 3 проверьте только Space пунктом.

2) Разделите полное имя на имя, отчество и фамилию с помощью формул

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

Общие формулы, используемые для разделения полного имени

Разделить имя

=LEFT(cell,SEARCH(» «, cell)-1)

Разделить отчество

=MID(cell, SEARCH(» «, cell) + 1, SEARCH(» «, cell, SEARCH(» «, cell)+1) — SEARCH(» «, cell)-1)

Разделить фамилию

=RIGHT(cell,LEN(cell) — SEARCH(» «,cell, SEARCH(» «,cell,1)+1))

Затем примените формулы в разных ячейках, чтобы получить имя, отчество и фамилию.

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

=LEFT(B5,SEARCH(» «, B5)-1)

2. Введите приведенную ниже формулу в ячейку E5 и нажмите клавишу Enter ключ для получения первого отчества. Выберите ячейку результата и перетащите ее дескриптор автозаполнения вниз, чтобы получить другие отчества.

=MID(B5, SEARCH(» «, B5) + 1, SEARCH(» «, B5, SEARCH(» «, B5)+1) — SEARCH(» «, B5)-1)

3. Чтобы получить фамилии, введите приведенную ниже формулу в ячейку F5 и нажмите. Enter, а затем выберите ячейку результата и перетащите ее маркер автозаполнения на нужные ячейки.

=RIGHT(B5,LEN(B5) — SEARCH(» «,B5, SEARCH(» «,B5,1)+1))

3) Разделите полное имя на имя, отчество и фамилию с помощью удивительного инструмента

Вот введение в Kutools for ExcelАвтора Разделить имена функция, которая позволяет разделить полное имя на имя, отчество и фамилию сразу с помощью всего нескольких щелчков мышью.

1. Выделите ячейки с полным именем, которые нужно разделить, и нажмите Кутулс > Слияние и разделение > Разделить имена.

2. в Разделить имена диалоговое окно необходимо настроить следующим образом.

2.1) Выбранный диапазон перемещается в Диапазон до раскол коробка, при необходимости ее можно менять;

2.2). Сплит-типы раздел, проверьте Имя, Отчество, А Фамилия коробки;

2.2) Нажмите OK кнопку.

3. В следующем всплывающем окне Разделить имена диалоговом окне выберите ячейку назначения для вывода разделенных текстов, а затем щелкните OK. См. Демонстрацию ниже.

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

Пример # 8 Разделение текста и чисел в ячейках

Предположим, что существует список текстовых строк со смешанными текстами и числами, как показано на снимке экрана ниже, чтобы разделить текст и числа и поместить их в разные столбцы, мы предлагаем вам четыре метода.

Разделение текста и чисел с помощью формул

С помощью следующих формул вы можете разделить текст и числа из одной ячейки на две отдельные ячейки.

Общие формулы

Получить текст из ячейки

=LEFT(cell,MIN(FIND({0,1,2,3,4,5,6,7,8,9},cell&»0123456789″))-1)

Получать числа из сотового

=RIGHT(cell,LEN(B5)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},cell&»0123456789″))+1)

Затем примените эти две формулы в разных ячейках, чтобы получить отдельный текст и числа.

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

=LEFT(B5,MIN(FIND({0,1,2,3,4,5,6,7,8,9},B5&»0123456789″))-1)

2. Выберите ячейку (E5) рядом с первой ячейкой результата (D5), скопируйте или введите формулу ниже и нажмите Enter. Выберите ячейку результата и перетащите ее дескриптор автозаполнения вниз, чтобы получить номера других текстовых строк в списке.

=RIGHT(B5,LEN(B5)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},B5&»0123456789″))+1)

Разделение текста и чисел с помощью Flash Fill (2013 г. и более поздние версии)

Если вы используете Excel 2013 или более поздние версии, вы можете применить Вспышка заливки встроенный для разделения текста и чисел из одной ячейки на два столбца.

Внимание: Чтобы заставить работать функцию Flash Fill, вам нужно расположить столбцы результатов рядом с столбцом исходной текстовой строки. Например, если исходные текстовые строки находятся в столбце B, разделенный текст и числа должны быть помещены в столбцы C и D. См. Снимок экрана:

1. Вручную введите текст первой ячейки текстовой строки (D5) в ячейку C5.

2. Продолжайте вводить текст второй ячейки текстовой строки (D6) в ячейке C6.

3. Активируйте ячейку C7, нажмите Данные > Вспышка заливки.

Затем тексты других текстовых строк заполняются ячейками автоматически, как показано на скриншоте ниже.

4. Повторите шаги с 1 по 3, чтобы получить числа в столбце D.

Заметки:

1) Если ваши текстовые строки нестандартные, они могут возвращать неправильные значения. Вы можете нажать Ctrl + Z отменить Вспышка заливки а затем перейдите к применению других методов.

2) Если Flash Fill не работает, нажмите Файл > Опции. В Параметры Excel окна, нажмите Дополнительно на левой панели проверьте Автоматически Вспышка заливки коробка в Параметры редактирования раздел, а затем щелкните OK.

Разделение текста и чисел с помощью функции, определяемой пользователем

Если текстовые строки в списке не являются регулярными, два вышеуказанных метода могут вернуть неправильные результаты, как показано на снимке экрана ниже.

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

1. нажмите другой + F11 ключи.

2. В дебюте Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, а затем скопируйте приведенный ниже VBA в окно кода.

Код VBA: разделить текст и числа из ячейки на два столбца

Public Function SplitText(pWorkRng As Range, pIsNumber As Boolean) As String
'Update by Extendoffice 20211105
Dim xLen As Long
Dim xStr As String
xLen = VBA.Len(pWorkRng.Value)
For i = 1 To xLen
    xStr = VBA.Mid(pWorkRng.Value, i, 1)
    If ((VBA.IsNumeric(xStr) And pIsNumber) Or (Not (VBA.IsNumeric(xStr)) And Not (pIsNumber))) Then
        SplitText = SplitText + xStr
    End If
Next
End Function

3. нажмите другой + Q ключи, чтобы закрыть Microsoft Visual Basic для приложений окно.

4. Выберите ячейку для вывода текста первой текстовой строки, введите формулу ниже и нажмите Enter ключ. Выберите эту ячейку результата и перетащите ее дескриптор автозаполнения вниз, чтобы получить текст других текстовых строк в том же списке.

=SplitText(B5,FALSE)

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

=SplitText(B5,TRUE)

Разделите текст и числа с помощью замечательного инструмента

Здесь рекомендуют самый простой способ разделить текст и числа сразу из ячейки на два столбца. ПрименяяРазделить клетки особенность Kutools for Excel поможет вам решить эту проблему с помощью всего нескольких щелчков мышью.

1. Выделите ячейки текстовой строки, в которых вы хотите разделить текст и числа на два столбца.

2. Нажмите Кутулс > Слияние и разделение > Разделить клетки.

3. в Разделить клетки В диалоговом окне необходимо выполнить следующие настройки.

3.1) Выбранный диапазон отображается в Разделить диапазон поле, и вы можете щелкнуть кнопка для выбора нового диапазона по мере необходимости;

3.2). Тип раздел, выбрать Разделить на строки or Разделить на столбцы;

3.3). Разделить на выберите Текст и число переключатель;

3.4) Нажмите OK кнопку.

4. В следующем Разделить клетки диалоговом окне выберите ячейку для вывода разделенного текста и чисел, а затем щелкните значок OK кнопку.

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

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


2. Разделение числовых ячеек

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

Пример # 1: разделение ячеек по цифрам

Если вы хотите разделить число, состоящее из нескольких цифр, на отдельные цифры в разных столбцах, попробуйте один из следующих способов.

Разделите число в ячейке на отдельные цифры с помощью формулы

Приведенная ниже формула может помочь разбить число на отдельные цифры и поместить их в разные столбцы.

Общая формула

=MID($A1, COLUMNS($A$1:A$1), 1)

Аргумент

A1: Представляет ячейку, содержащую число, которое вы хотите разделить на отдельные цифры.

1. Выберите пустую ячейку для вывода первой цифры, введите приведенную ниже формулу и нажмите клавишу Enter .

=MID($B3, COLUMNS($B$3:B$3), 1)

2. Выберите эту ячейку результата и перетащите ее маркер автозаполнения вправо в ячейки, чтобы получить другие цифры. Не снимая выделения со всех ячеек результатов, перетащите маркер автозаполнения вниз, чтобы получить отдельные цифры других чисел.

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

Разделите число в ячейке на отдельные цифры с помощью VBA

Приведенный ниже код VBA также может помочь разделить число в ячейке на отдельные цифры в Excel. Вы можете сделать следующее.

1. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, а затем скопируйте приведенный ниже VBA в окно кода.

Код VBA: разделить номер на отдельные цифры в Excel

Sub SplitNumberIntoDigits()
'Updateby Extendoffice 2021118
Dim Rng As Range
Dim InputRng As Range, OutRng As Range
xTitleId = "Kutools for Excel"
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)
 xInt = InputRng.Row

Application.ScreenUpdating = False

For Each Rng In InputRng
    xValue = Rng.Value
    xRow = (Rng.Row - xInt) + 1
    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 ключ для запуска кода, затем Kutools for Excel появится диалоговое окно, вам нужно выбрать диапазон числовых ячеек, которые вы разделите, а затем щелкнуть OK кнопку.

4. Секунда Kutools for Excel появится диалоговое окно, вам нужно выбрать ячейку для вывода отдельных цифр, а затем щелкнуть OK.

Внимание: Этот код также может разбивать слово на отдельные буквы.

Затем числа в выбранных ячейках разбиваются на отдельные цифры и помещаются в разные столбцы.

Легко разбивайте число на отдельные цифры с помощью замечательного инструмента

Kutools for ExcelАвтора Разделить клетки feature — удобный инструмент, который поможет вам легко разбить число на отдельные цифры в Excel.

1. После установки Kutools for Excel, выберите диапазон числовых ячеек, который вы разделите, нажмите Кутулс > Слияние и разделение > Разделить клетки.

2. в Разделить клетки диалоговом окне выполните следующие настройки.

2.1). Разделить диапазон Вы можете увидеть выбранный диапазон, отображаемый в текстовом поле. Вы можете нажать на кнопка для изменения диапазона по своему усмотрению;

2.2). Тип раздел, выбрать Разделить на строки or Разделить на столбцы в соответствии с вашими потребностями;

2.3). Разделить на выберите Укажите ширину переключатель, введите номер 1 в текстовое поле;

2.4) Нажмите OK кнопку.

3. В дебюте Разделить клетки диалоговом окне выберите пустую ячейку для вывода цифр, а затем щелкните значок OK кнопку.

Затем числа в выбранных ячейках сразу разбиваются на отдельные цифры.

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

Пример # 2 Разделение числа на десятичное

В этом разделе обсуждаются несколько методов разделения числа на целые и десятичные части в Excel.

Разделить число на десятичную дробь с формулами

Функция TRUNC может применяться для разделения числа на десятичную дробь в Excel. Вы можете сделать следующее.

Общие формулы

Получить целую часть

=TRUNC(A1)

Получить десятичную часть

=A1-TRUNC(A1)

Аргумент

A1: Представляет ячейку, которую вы хотите разделить на десятичную дробь.

Теперь вы можете применить эти две формулы для разделения чисел в указанном диапазоне ячеек на десятичные числа в Excel.

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

= TRUNC (B5)

2. Выберите ячейку рядом с первой ячейкой результата для размещения десятичной части, введите формулу ниже и нажмите Enter ключ. Выделите эту ячейку результата и перетащите ее дескриптор автозаполнения вниз, чтобы получить десятичные дроби других числовых ячеек.

= B5-TRUNC (B5)

Разделить число на десятичное с помощью текста в столбцы

Вы можете применить Текст в столбцы функция разделения числа на десятичную дробь в Excel.

1. Выберите диапазон числовых ячеек, которые вы разделите на десятичные дроби, а затем щелкните Данные > Текст в столбцы.

2. в Мастер преобразования текста в столбцы — шаг 1 из 3 в диалоговом окне выберите разграниченный переключатель и щелкните Download кнопку.

3. в Шаг 2 из 3 диалоговое окно, только отметьте Другое флажок, введите точку в текстовое поле, а затем щелкните значок Download кнопку.

4. в Шаг 3 из 3 диалогового окна, нажмите кнопку, чтобы выбрать ячейку назначения для вывода разделенных целых и десятичных чисел, и, наконец, нажмите кнопку Завершить кнопка. Смотрите скриншот:

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

Разделить число на десятичное с помощью Flash Fill (2013 г. и более поздние версии)

В приведенном выше примере мы ввели использование Вспышка заливки функция для разделения текста и чисел в ячейках, и здесь мы представим тот же метод для разделения числа на десятичную дробь.

1. Введите пару примеров. В этом случае мы вводим целую часть B5 в C5, вводим целую часть B6 в C6. Смотрите скриншот:

Внимание: Для отрицательных чисел не забудьте ввести знак минус вместе.

3. Выберите ячейки, включая пару примеров, в столбце, который вы хотите заполнить, и нажмите Данные > Вспышка заливки.

Затем целые числа извлекаются из указанных числовых ячеек, как показано на скриншоте ниже.

4. Повторите описанные выше шаги, чтобы разделить десятичные дроби из одинаковых числовых ячеек.


3. Разделение ячеек даты

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

Пример # 1 Разделение ячеек даты на отдельные день, месяц и год

Предполагая, что у вас есть список дат в диапазоне B5: B9, и вы хотите разделить каждое значение даты на три отдельных столбца для дня, месяца и года. Здесь представлены три метода, которые помогут вам добиться результата разделения дат.

Разделите ячейки даты на день, месяц и год с помощью формул

Вы можете применить три формулы на основе ДАТА Функция, МЕСЯЦ функции и ГОД функция для разделения даты на отдельные день, месяц и год в Excel.

Общие формулы

=DATE(A1)

=MONTH(A1)

=YEAR(A1)

Аргумент

A1: Представляет ячейку даты, которую вы хотите разделить на день, месяц и год.

1. Создайте три столбца, чтобы разместить отдельные день, месяц и год.

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

=DAY(B5)

3. Выполните ту же операцию, что и на шаге 1, чтобы применить следующие формулы в Месяц и Год столбец, чтобы получить отдельные месяц и год из ячеек даты.

Получить месяц даты

=MONTH(B5)

Получить год свидания

=YEAR(B5)

Разделите ячейки даты на день, месяц и год с помощью текста в столбцы

Вы можете следуйте инструкциям выше, чтобы применить функцию «Текст в столбцы» чтобы разделить ячейки даты на отдельные день, месяц и год в Excel.

Внимание: В Шаг 2 из 3 диалоговое окно, только отметьте Другое поле и введите / символ в текстовом поле.

Разделите ячейки даты на день, месяц и год с помощью удивительного инструмента

В приведенной ниже демонстрации показано, как разделить дату на месяц, день и год с помощью Разделить клетки особенность Kutools for Excel.

Эта функция поможет вам добиться результата группового разделения дат всего за несколько щелчков мышью.

Нажмите, чтобы узнать больше об этой функции.

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

Пример # 2 Разделение даты и времени в ячейке

Предположим, что в B5: B9 есть список даты и времени, и вы хотите разделить дату и время на отдельные столбцы, в этом разделе будут продемонстрированы различные способы помочь вам в этом.

Разделить дату и время в ячейке с помощью формулы

Вы можете применить следующие формулы для разделения даты и времени по разным столбцам в Excel.

1. Подготовьте две колонки для размещения даты и времени.

2. Вам необходимо установить для ячеек столбца даты значение Время формат и установите для ячеек столбца времени значение Продолжительность формат.

1) Выберите диапазон дат, щелкните правой кнопкой мыши и выберите Формат ячеек из контекстного меню. в Формат ячеек диалоговое окно, выберите Время в Категория выберите нужный формат даты в поле Тип и нажмите OK для сохранения изменений.

2) Выберите временной диапазон, щелкните правой кнопкой мыши и выберите Формат ячеек из контекстного меню. в Формат ячеек диалоговое окно, выберите Продолжительность в Категория выберите нужный формат времени в Тип и нажмите OK для сохранения изменений.

3. Выберите первую ячейку в Время столбец, введите формулу ниже и нажмите Enter ключ для получения даты B5. Выделите эту ячейку результата и перетащите ее дескриптор автозаполнения вниз, чтобы получить другие даты.

=INT(B5)

4. Примените следующую формулу в столбце времени, чтобы получить время в B5: B9.

=B5-D5

Разделение даты и времени в ячейке с помощью Flash Fill (2013 г. и более поздние версии)

Если вы используете Excel 2013 и более поздние версии, вы можете применить встроенную функцию Flash Fill, чтобы разделить дату и время на разные столбцы.

1. Создайте столбцы «Дата» и «Время» и введите в качестве вывода несколько примеров. в Время В столбце мы вводим дату B5 в C5 и вводим дату B6 в C6. в Продолжительность В столбце мы вводим время B5 в D5 и вводим время B6 в D6. Смотрите скриншот:

2. Выберите столбец «Дата» (включая несколько примеров), который вы хотите заполнить, нажмите Данные > Вспышка заливки.

3. Выберите столбец «Время» (включая несколько примеров), который вы хотите заполнить, а затем включите Вспышка заливки особенность. Затем даты и время в B5: B9 разбиваются на отдельные столбцы, как показано в демонстрации ниже.

Теперь вы узнали, как разбивать ячейки в Excel разными методами в разных ситуациях. Вы сможете принять лучшее решение, чтобы определить, какой метод вы выберете в зависимости от вашего конкретного сценария.


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

0 / 0 / 0

Регистрация: 22.10.2019

Сообщений: 9

1

Разделение ячейки на строки по нескольким разделителям

22.10.2019, 10:39. Показов 3619. Ответов 19


Студворк — интернет-сервис помощи студентам

Вопрос такой, есть несколько названий нас. Пунктов в ячейке , к примеру п.Нагорный, с.Бекетовка р.п. Молокова ; с.Белое. Как видите , использовать для разделения запятую или другой опр.символ нельзя, так как его попросту может не быть перед названием. Возникла идея такая . Перед п. , с. , р.п. вставить разделитель # и потом делить строку на массивы по нему . С реализацией не могу справиться, все варианты уже перебрал. Не работает код. Прошу помощи ) к сожалению файл не могу прикрепить



0



art1289

208 / 183 / 43

Регистрация: 02.08.2019

Сообщений: 585

Записей в блоге: 23

22.10.2019, 10:45

2

Денис_Елисеев, привет!

Visual Basic
1
2
3
4
5
6
7
8
9
Public Function РАЗБСТРОКУ(ЯЧЕЙКА, Optional Разделитель As String = " ", Optional n As Integer = 1) As String
          Dim X As Variant
      X = Split(ЯЧЕЙКА, Разделитель)
      If n > 0 And n - 1 <= UBound(X) Then
          РАЗБСТРОКУ = X(n - 1)
      Else
          РАЗБСТРОКУ = ""
      End If
End Function



0



ArtNord

370 / 268 / 93

Регистрация: 18.11.2015

Сообщений: 990

22.10.2019, 15:55

3

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub fff()
f = 2
aLen = Len(Cells(1, 1))
    For curS = 1 To aLen
    NumSymb = Asc(Mid(Cells(1, 1), curS, 1))
     If NumSymb > 191 Or NumSymb = 46 Then nPlace = nPlace + 1
     If NumSymb = 32 And nPlace < 3 Then nPlace = nPlace + 1
     If NumSymb = 32 And nPlace > 3 Then
        If Asc(Mid(Cells(1, 1), curS - 1, 1)) <> 46 Then
            Cells(f, 1) = Mid(Cells(1, 1), curS, nPlace)
            f = f + 1
            nPlace = 0
        End If
     End If
        
    Next curS
End Sub



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

22.10.2019, 17:00

4

Если перечень сокращений нас.пунктов известен, то можно попробовать так :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Test()
    Dim t$, i&, a
    a = Array("п.", "с.", "р.п.")
    t = Cells(1)
    t = Replace(t, ";", "")
    t = Replace(t, ",", "")
    For i = 0 To UBound(a)
        t = Replace(t, a(i) & " ", a(i))
    Next
    a = Split(Application.Trim(t))
    If UBound(a) > -1 Then
       Cells(2).Resize(, UBound(a) + 1) = a
    End If
End Sub



0



Burk

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

22.10.2019, 17:55

5

Денис_Елисеев, а вот по вашему алгоритму, малость усовершенствовал.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub proba()
Dim I As Integer, S As String, Ar
S = "п.Нагорный, с.Бекетовка р.п. Молокова ; с.Белое"
S = Replace(S, "р.п.", "@")
S = Replace(S, "п.", "#п."): S = Replace(S, "с.", "#с.")
S = Replace(S, "@", "#р.п."):
If Left(S, 1) = "#" Then S = Mid(S, 2)
Ar = Split(S, "#")
For I = 0 To UBound(Ar)
  Cells(I + 2, 1) = Ar(I)
Next
End Sub

Добавлено через 51 минуту
Строку 7 лучше так

Visual Basic
1
I=Instr(S, "#"): If I > 0 Then S = Mid(S, I + 1)



0



Narimanych

2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,141

23.10.2019, 19:34

6

Денис_Елисеев,

Для ячейки А1 вариант через регулярку:

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub MMM()
Dim RR As New RegExp
Dim M As Match
Dim COL As MatchCollection
RR.Global = True
RR.Pattern = "(п.|р.п.|с.)s{0,}[А-Яа-яЁё]+"
j = 3
Set COL = RR.Execute(Cells(1, 1).Value)
For Each M In COL
    Cells(1, j).Value = M.Value
    j = j + 1
Next
 
End Sub



1



0 / 0 / 0

Регистрация: 22.10.2019

Сообщений: 9

24.10.2019, 12:56

 [ТС]

7

Спасибо большое, попробую все варианты. Я подумал что каждой вариации наименований нас.пунктов присвоить индивидуальный разделитель, потом загнать из все в цикл и разделять.. одна беда, прога к примеру есть рп. И есть п. Вот прога видит символ п. в наименовании рп. и присваивает неверный разделитель

Добавлено через 4 минуты
Подскажи пожалуйста как работает этот код ? Регулярка это что ?)



0



2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,141

24.10.2019, 13:08

8

Денис_Елисеев,

Цитата
Сообщение от Денис_Елисеев
Посмотреть сообщение

Регулярка это что ?)

Добавлено через 42 секунды
Денис_Елисеев,
Регулярные выражения…
Копните гугл…



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

24.10.2019, 15:54

9

Цитата
Сообщение от Денис_Елисеев
Посмотреть сообщение

И есть п. Вот прога видит символ п. в наименовании рп. и присваивает неверный разделитель

я же вам показа в своем коде как это делается, заменяете рп на како-то символ (напр. @), заменяете п, а

потом

этот символ (@) меняете на разделитель+рп. Смотрите макрос.



1



Narimanych

2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,141

24.10.2019, 19:08

10

Денис_Елисеев,

Цитата
Сообщение от Денис_Елисеев
Посмотреть сообщение

дна беда, прога к примеру есть рп. И есть п. Вот прога видит символ п. в наименовании рп. и присваивает неверный разделитель

Попробуйте:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub NNN()
Set RR = CreateObject("VBScript.RegExp")
RR.Global = True
RR.Pattern = "(п.|р.*п.|с.)s{0,}[А-Яа-яЁё]+"
Set COL = RR.Execute(Cells(1, 1).Value)
j = 3
For Each M In COL
    Cells(1, j).Value = M.Value
    j = j + 1
Next
End Sub



0



art1289

208 / 183 / 43

Регистрация: 02.08.2019

Сообщений: 585

Записей в блоге: 23

25.10.2019, 06:24

11

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Value <> "" Then
        '       Shell "d:20AmpViewAmpView.exe d:20" + Target.Value, vbNormalFocus
    End If
    Cancel = True
End Sub
Public Sub WordLook()
    Dim i      As Integer
    i = 2
    Do While ActiveSheet.Cells(i, 4).Value <> vbNullString
        If ActiveSheet.Cells(i, 4).Value = ActiveSheet.Cells(i, 5).Value Then
            ActiveSheet.Cells(i, 6).Value = ActiveSheet.Cells(i, 4).Value
            ActiveSheet.Cells(i, 6).Font.Color = vbGreen
        Else
            ActiveSheet.Cells(i, 6).Value = ActiveSheet.Cells(i, 5).Value
            Call AddColor2(ActiveSheet.Cells(i, 6), ActiveSheet.Cells(i, 4))
        End If
        i = i + 1
    Loop
End Sub
Private Sub AddColor2(Rng1 As Range, Rng2 As Range)
    Dim i      As Integer
    With Rng1
        For i = 1 To Len(.Value)
            If Mid(Rng1.Value, i, 1) <> Mid(Rng2.Value, i, 1) Then
                Call CharactersColor2(Rng1, vbRed, i)
            End If
        Next i
    End With
End Sub
Private Sub CharactersColor2(Rng1 As Range, lColor As Long, iStart As Integer)
    With Rng1.Characters(Start:=iStart, Length:=1).Font
        .Color = lColor
    End With
End Sub
Public Sub WordLook3(i As Long)
 
    If ActiveSheet.Cells(i, 4).Value = ActiveSheet.Cells(i, 5).Value Then
        ActiveSheet.Cells(i, 6).Value = ActiveSheet.Cells(i, 4).Value
        ActiveSheet.Cells(i, 6).Font.Color = vbGreen
    Else
        ActiveSheet.Cells(i, 6).Value = ActiveSheet.Cells(i, 5).Value
        Call AddColor2(ActiveSheet.Cells(i, 6), ActiveSheet.Cells(i, 4))
    End If
 
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    Target.Font.Color = vbBlack
    Dim i As Long
    If Target.Column = 5 Then
        Select Case TypeName(Target.Value2)
            Case "String":
                Call WordLook3(Target.Row)
            Case "Variant()":
                Application.EnableEvents = False
                For i = Target.Row To Target.Row + Target.Rows.Count - 1
                    Call WordLook3(i)
                Next i
                Application.EnableEvents = True
        End Select
    End If
    Application.EnableEvents = True
End Sub
 
Sub sdsd()
 Application.EnableEvents = True
End Sub

код!



0



2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,141

25.10.2019, 08:13

12

art1289,

По-моему вы ошиблись адресом…



0



0 / 0 / 0

Регистрация: 22.10.2019

Сообщений: 9

25.10.2019, 08:23

 [ТС]

13

Спасибо, потом внимательно почитал и понял, как работает.



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

25.10.2019, 13:40

14

Цитата
Сообщение от Денис_Елисеев
Посмотреть сообщение

внимательно почитал и понял

а лучше сначала запустить макрос и, если результат правильный, разбираться с кодом.



0



2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,141

25.10.2019, 15:42

15

Burk,

Цитата
Сообщение от Burk
Посмотреть сообщение

лучше сначала запустить макрос и, если …

Насчет кода в т 10?
Если есть замечания, буду рад услышать …



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

25.10.2019, 17:58

16

Narimanych, я смотрел только ваш первый код, он работал некорректно, другие не смотрел. А моё замечание по запуску макроса относится к моему макросу и предназначено для Денис_Елисеев. Я всегда стараюсь для новичков писать попроще. Не уверен, что ваш код будет понятен автору и он сможет его объяснить. Вашими структурами в таких простых задачах я не пользуюсь и мне тоже с первого взгляда не разобраться. Работает и прекрасно. Но, если позволите, лучше я без замечаний, разбираться не хочется.



0



2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,141

26.10.2019, 10:58

17

Burk,

Цитата
Сообщение от Burk
Посмотреть сообщение

мотрел только ваш первый код, он работал некорректно

Еще раз пересмотрел оба кода — все работает нормально.
В первом- без «Create Object («VBScript.RegExp»)- его надо было включить ручками.

Во втором- добавил опцию для вариантов «р.п» и «рп.»

А теперь насчет вашего кода:

Цитата
Сообщение от Burk
Посмотреть сообщение

а лучше сначала запустить макрос и, если результат правильный, разбираться с кодом.

Проверьте свой код….прежде чем искать ошибки у других…

С наилучшими пожеланиями….



0



Burk

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

26.10.2019, 16:29

18

Narimanych, свой запустил ещё раз, взяв из своего поста, вроде нормально. Ошибок в других программах не выискиваю, смотрел в самом начале сообщений по теме и мог ошибиться относительно автора макроса. Там их много. К вашим сообщениям отношусь с уважением и намек на некорректность был достаточно вежливым. Тем не менее мои извинения. Еще раз повторяю,

выделенный вами фрагмент моего поста никакого отношения к вам не имеет

, он предназначен для Денис_Елисеев, просто забыл нажать на его НИК

Добавлено через 2 часа 40 минут
В моем макросе рассматривается вариант рабочего посёлка в виде (как у автора темы) р.п. Если будут другие варианты названий категорий населённых пунктов, то их надо предусматривать аналогично и всё будет Ок. В строке 3 моего макроса так и написано. Надо просто запустить макрос не меняя строку 3 в нём

Добавлено через 1 час 51 минуту
Денис_Елисеев, вот вариант замен, в котором надо только указать в строчной переменной RepWhat что меняем, а в переменной RepWith на что меняем (строки 5-6). Надо только правильно записать порядок замен. Временные замены надо делать на заглавные латинские символы, смотрите код примера

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub proba()
Dim I As Integer, S As String, RepWhat As String, RepWith As String
Dim ArWhat, ArWith, Ar
S = "п.Нагорный, с.Бекетовка р.п. Молокова ; с.Белое р/п. Васино р. п. Яшкино"
RepWhat = "р.п.,рп.,р/п.,р. п.,п.,с.,W,R,D,U" 'что меняем
RepWith = "W,R,D,U,п.,с.,р.п.,рп.,р/п.,р. п." 'на что меняем
ArWhat = Split(RepWhat, ","): ArWith = Split(RepWith, ",")
For I = 0 To UBound(ArWhat)
  S = Replace(S, ArWhat(I), IIf(ArWith(I) Like "[A-Z]", "", "#") & ArWith(I))
Next
S = Trim(Mid(S, InStr(S, "#") + 1))
Ar = Split(S, "#")
For I = 0 To UBound(Ar)
  Cells(I + 2, 1) = Ar(I)
Next
End Sub



1



0 / 0 / 0

Регистрация: 22.10.2019

Сообщений: 9

29.10.2019, 10:49

 [ТС]

19

Спасибо, я разобрался в коде что Вы скидывали ранее и сделал под себя, с маленькими изменениями. Теперь вот вопрос стоит такой . Как поменять местами две ячейки в строке ! Не соседние ! К примеру 5 и 7 столбца , но ничего не записывая в другие ячейки . Нет, так то записать можно, потом то значение перекинуть в другую ячейку заменив перед этим значением из 7. Но это будет легко. Хочется усложнить задачу, чтобы узнать побольше функций. Уже читал на форуме , кто то делал это, но я не понял как к сожалению.



0



Burk

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

29.10.2019, 11:23

20

Денис_Елисеев, я знаю только простой вариант

Visual Basic
1
S=cells(1,5): cells(1,5)=cells(1,7):cells(1,7)=S   'S - переменная типа Variant

Вот только стоит ли заморачиваться над такими задачами. Даже, если сделаете как-то иначе, это не даст никакого выигрыша ни во времени, ни в пространстве. Всё равно процессор выполнит это перемещение по такому же алгоритму. А соседние или не соседние ячейки значения не имеет, это не переноска груза на расстояние.



1



Столбец А — исходные данные, строка 2 — «шапка таблицы»

=ЛЕВБ(ПСТР($A3&";";ПОИСК(B$2;$A3)+ДЛСТР(B$2)+1;20);ПОИСК(";";ПСТР($A3&";";ПОИСК(B$2;$A3)+ДЛСТР(B$2)+1;20))-1)

В формуле A3&»;» — дополнение строки можно убрать, если последний символ в исходных данных всегда точка с запятой.

Вторая формула и без сцепки нечувствительна к отсутствию последнего символа.

=СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР($A3;ПОИСК(B$2;$A3)+ДЛСТР(B$2)+1;20);";";ПОВТОР(" ";50));50))

Решение с помощью функции пользователя (UDF) с использованием функции ПОИСК

Function FindName(r1 As Range, r2 As Range) As String
Dim j As Long
    j = Application.WorksheetFunction.Find(r2.Value, r1.Value)
    FindName = Split(Mid$(r1.Value, j + Len(r2.Value) + 1), ";")(0)
End Function

Вариант без использования функций листа:

Function FindName(r1 As Range, r2 As Range) As String
    FindName = Split(Split(r1.Value, r2.Value & ":")(1), ";")(0)
End Function

Функцию разместить в общем модуле.

В ячейку В3 вписать формулу:

=FindName($A3;B$2)

Размножить на нужный диапазон

Недостаток UDF — волатитьность (пересчитываются при любых изменениях на листе)

В программе Excel присутствует кнопка для разъединения объединенных ячеек таблицы на закладке: «ГЛАВНАЯ»-«Выравнивание»-«Отменить объединение ячеек». Но что, если эту операцию нужно выполнять многократно, да еще и после нее заполнять данными ново созданные ячейки. Реализовать данную задачу вручную – это весьма затратное занятие по времени и силам. Здесь рационально воспользоваться макросом.

Макрос для разъединения объединенных ячеек в Excel

Допустим у нас уже имеется вполне читабельная таблица списка заказов, в которой имеются объединенные ячейки в столбце «Год». Пример, такой таблицы изображен ниже на рисунке:

таблица списка заказов.

Но нам необходимо преобразовать данную таблицу в стандартный формат, например, для создания отчета на основе сводной таблицы. Для этого откроем редактор Visual Basic (ALT+F11):

Visual Basic.

И вставим новый стандартный модуль используя инструмент в редакторе: «Insert»-«Module». А после чего запишем в модуль VBA код макроса для разъединения объединенных ячеек:

Sub RazdelitVstavit()
Dim adres As String
adres = ActiveCell.MergeArea.Address
If adres <> ActiveCell.Address Then
  ActiveCell.UnMerge
  ActiveCell.Copy
  ActiveSheet.Paste ActiveSheet.Range(adres)
  Application.CutCopyMode = False
End If
End Sub

модуль VBA код макроса.

Если мы хотим отменить объединение ячеек в столбце «Год» и заполнить созданные ячейки соответствующими значениями (годами), тогда перейдите на одну большую объединенную ячейку B2 и запустите макрос: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«RazdelitVstavit»-«Выполнить».

отменить объединение ячеек.

В данном VBA коде макроса используется только одна переменная. Она хранит в себе адрес диапазона ячеек B2:B15 которые охватывает одна активная объединенная ячейка.

adres = ActiveCell.MergeArea.Address

Адрес активной ячейки отображается в поле «Имя» (напротив строки формул Excel). Но там не отображается полный адрес объединенной ячейки.

Адрес активной ячейки.

Для пользователя в поле «Имя» будет адрес отображаться одинаково, но в макросе их можно различить с помощью методов объекта ActiveCell.MergeArea.Addres. В зависимости какой тип активных ячеек будет возвращен тип адреса – одна ячейка или диапазон. Если активная ячейка не является объединенной, тогда в переменной будет храниться только адрес одной активной ячейки, а не целого диапазона. Далее макрос проверяет является ли текущая активная ячейка – объединенной, с помощью сравнения двух способов получения адреса для одной и той же активной ячейки. Тот способ, который передал адрес в переменную из метода объекта ActiveCell.MergeArea.Addres и обычный – ActiveCell.Addres. Если адрес в переменной и адрес получен обычным способом не совпадает, значит она является объединенной и код выполняется дальше.

С помощью метода объекта ActiveCell.UnMerge выполняется разъединение объединенной активной ячейки. Далее копируется ее содержимое и заполняется диапазон на листе, адрес которого получен из переменной, его же ранее содержала в себе объединенная активная ячейка. После копирования значения для объекта CutCopyMode устанавливается свойство False, чтобы прекратить процесс копирования. В результате таблица листа заказов будет иметь такой же вид как показано ниже на рисунке:

Пример.

Данный макрос позволяет разъединить объединенные ячейки, которые используют любое направление объединения: как по вертикали, так и полгоризонтали. Ее значение будет одинаково вставлено во все ячейки, созданные после разъединения.

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



Как разъединить объединенные ячейки сразу в нескольких диапазонах

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

Dim i As Long

Создадим цикл, который будет перемещаться по всем выделенным объединенным ячейкам:

For i = 1 To Selection.Count

В конце кода не забудем добавить конец цикла:

Next

Вместо ссылки на активную ячейку Active.Cell теперь будем использовать ссылку на очередную по счету ячейку в выделенном диапазоне: Selection.(i). Полная версия усовершенствованного макроса выглядит следующим образом:

Sub RazdelitVstavit()
Dim adres As String
Dim i As Long
For i = 1 To Selection.Count
  adres = Selection(i).MergeArea.Address
  If adres <> Selection(i).Address Then
    Selection(i).UnMerge
    Selection(i).Copy
    ActiveSheet.Paste ActiveSheet.Range(adres)
    Application.CutCopyMode = False
  End If
Next
End Sub

Пример2.

Цикл, который перемещается по каждой объединенной ячейке выделенного диапазона, каждый раз вызывает VBA код макроса для разъединения их диапазона объединения с учетом всех выше описанных условий.

Читайте также: Как объединить ячейки в Excel с помощью кода макроса VBA.

Так же стоит отметить, что выделенный диапазон может содержать необъединенные ячейки, которые будут просто игнорироваться макросом. Если бы мы не усовершенствовали наш макрос, то при выделении нескольких объединенных ячеек – разделилась бы только первая.

  • Функция разделения VBA

Функция разделения VBA

Как следует из названия, Split — это функция, которая разбивает строки на разные части. У нас есть много таких функций в таблицах Excel, таких как левый правый и средний. Но когда нам нужна любая строка для разграничения по частям, мы используем функцию Split в VBA. Это одна из лучших функций в VBA для выполнения различных типов операций со строками.

Функция split в основном является функцией подстроки, которая принимает строку в качестве входных данных и дает другую строку в качестве выходных данных. Единственное отличие между другой функцией подстроки, такой как left right, mid и split, заключается в том, что функция LEFT, RIGHT & MID просто принимает одну строку в качестве ввода или аргумента и возвращает одну строку в качестве вывода, в то время как функция SPLIT возвращает массив строк в виде выход.

Формула для функции разделения в Excel VBA

Функция разделения VBA имеет следующий синтаксис:

Позвольте мне сначала объяснить аргументы для функции разделения VBA:

  • Выражение в виде строки: это обязательный аргумент в функции разделения VBA. Выражение в виде строки относится к строке, которую мы хотим разбить на части.
  • Разделитель: это необязательный аргумент. Это символ, который используется для разбиения строк на части. Но если мы не предоставляем какой-либо разделитель, VBA рассматривает пробел «» как разделитель по умолчанию.
  • Ограничение: это также необязательный аргумент. Предел означает максимальное количество частей, которые мы хотим сделать из строки. Но опять же, если мы не предоставляем ограничение для функции, VBA рассматривает его как значение по умолчанию -1, что означает, что строка будет разбиваться на части каждый раз, когда в строке есть разделитель.
  • Сравните: этот последний аргумент также является необязательным аргументом. Сравнение — это метод, который описан как один из двух ниже:
  1. Либо это 0, что означает, что Split выполнит двоичное сравнение, что означает, что каждый символ должен соответствовать самому себе.
  2. Или это может быть 1, что означает, что функция Split сделает текстовое сравнение.

Все будет понятно на нескольких примерах. Но позвольте мне сначала привести очень простой пример того, что делает эта функция. Предположим, у нас есть входная строка как ANAND — ХОРОШИЙ МАЛЬЧИК. Разделенная строка разбивает его по частям каждое слово отдельно. Мы также можем использовать функцию Split для подсчета количества слов в строке или мы можем использовать ее для вывода только определенного количества слов в данной строке.

Как использовать функцию разделения VBA Excel?

Мы научимся использовать функцию VBA Split Excel на нескольких примерах.

Вы можете скачать этот шаблон VBA Split Excel здесь — Шаблон VBA Split Excel

Функция разделения VBA — Пример № 1

Как насчет того, чтобы мы использовали приведенную выше строку ANAND IS GOOD BOY с функцией split.

Примечание. Чтобы использовать функцию разделения в VBA, убедитесь, что параметр разработчика включен на вкладке «Файл» в разделе параметров.

Шаг 1. Перейдите на вкладку « Разработчик » и нажмите « Visual Basic» .

Шаг 2: Появится окно проекта, чтобы щелкнуть Лист 1, чтобы открыть окно кода.

Шаг 3: Когда появится окно кода, объявите подфункцию, чтобы начать писать код.

Код:

 Sub Sample () End Sub 

Шаг 4: Объявите два массива переменных и один как строки A и B.

Код:

 Sub Sample () Dim A As String Dim B () As String End Sub 

Шаг 5: Сохраните значение строки в A.

Код:

 Sub Sample () Dim A As String Dim B () As String A = "ANAND IS A GOOD BOY" Конец Sub 

Шаг 6: В массиве B сохраните значение A, используя функцию разделения, как показано ниже.

Код:

 Sub Sample () Dim A As String Dim B () As String A = "И Я ХОРОШИЙ МАЛЬЧИК" B = Split (A) End Sub 

Шаг 7: Используйте For Loop, чтобы разбить каждую строку.

Код:

 Sub Sample () Dim A As String Dim B () As String A = "ANAND IS A GOOD BOY" B = Split (A) Для i = LBound (B) К UBound (B) strg = strg & vbNewLine & "String Number "& i &" - ​​"& B (i) Далее i End Sub 

Шаг 8: Показать его с помощью функции Msgbox.

Код:

 Sub Sample () Dim A As String Dim B () As String A = "ANAND IS A GOOD BOY" B = Split (A) Для i = LBound (B) К UBound (B) strg = strg & vbNewLine & "String Number "& i &" - ​​"& B (i) Next i MsgBox strg End Sub 

Шаг 9: Запустите код с кнопки запуска, представленной ниже.

Мы получаем это как вывод, как только мы запускаем приведенный выше код.

Функция разделения VBA — Пример № 2

Теперь мы попытаемся принять ввод от пользователя и разбить строку на части.

Шаг 1: Перейдите на вкладку разработчика и щелкните Visual Basic, чтобы открыть редактор VB.

Шаг 2: Нажмите на Лист 2 в окне свойств, чтобы открыть окно кода.

Шаг 3: В окне кода объявите подфункцию, чтобы начать писать код.

Код:

 Sub Sample1 () End Sub 

Шаг 4: Объявите две переменные, одну как String, а другую как Array String.

Код:

 Sub Sample1 () Dim A As String Dim B () As String End Sub 

Шаг 5: Возьмите значение у пользователя и сохраните его в A, используя функцию Inputbox.

Код:

 Sub Sample1 () Dim A As String Dim B () As String A = InputBox («Введите строку», «Должно иметь пробелы») End Sub 

Шаг 6: Сохраните значение A в массиве B, используя функцию разделения.

Код:

 Sub Sample1 () Dim A As String Dim B () As String A = InputBox («Введите строку», «Должно иметь пробелы») B = Split (A) End Sub 

Шаг 7: Используйте For Loop, чтобы разбить каждую строку.

Код:

 Sub Sample1 () Dim A As String Dim B () As String A = InputBox («Введите строку», «Должно иметь пробелы») B = Разделить (A) Для i = LBound (B) К UBound (B) strg = strg & vbNewLine & "String Number" & i & "-" & B (i) Далее i End Sub 

Шаг 8: Показать его с помощью функции Msgbox.

Код:

 Sub Sample1 () Dim A As String Dim B () As String A = InputBox («Введите строку», «Должно иметь пробелы») B = Разделить (A) Для i = LBound (B) К UBound (B) strg = strg & vbNewLine & "String Number" & i & "-" & B (i) Далее i MsgBox strg End Sub 

Шаг 9: Запустите код с кнопки запуска. Как только мы запустим код, мы получим входное сообщение для записи строки. Напишите «Я ХОРОШИЙ МАЛЬЧИК» в качестве ввода в поле ввода и нажмите ОК, чтобы увидеть результат.

Функция разделения VBA — Пример № 3

Мы также можем использовать функцию разделения VBA для подсчета количества слов в строке. Давайте возьмем ввод от пользователя и посчитаем количество слов в нем.

Шаг 1: Перейдите на вкладку разработчика и щелкните Visual Basic, чтобы открыть VB Editor.

Шаг 2: Нажмите на Лист 3 в окне проекта, чтобы открыть окно кода.

Шаг 3: Когда окно кода открыто, объявите подфункцию, чтобы начать писать код.

Код:

 Sub Sample2 () End Sub 

Шаг 4: Объявите две переменные, одну как строку, а другую как строку массива.

Код:

 Sub Sample2 () Dim A As String Dim B () As String End Sub 

Шаг 5: Возьмите ввод от пользователя и сохраните в A, используя функцию поля ввода.

Код:

 Sub Sample2 () Dim A As String Dim B () As String A = InputBox («Введите строку», «Должно иметь пробелы») End Sub 

Шаг 6: Используйте функцию Split и сохраните ее в B.

Код:

 Sub Sample2 () Dim A As String Dim B () As String A = InputBox («Введите строку», «Должно иметь пробелы») B = Split (A) End Sub 

Шаг 7: Используйте функцию Msgbox для отображения общего количества слов.

Код:

 Sub Sample2 () Dim A As String Dim B () As String A = InputBox («Введите строку», «Должно иметь пробелы») B = Split (A) MsgBox («Всего слов, которые вы ввели:» & UBound ( B ()) + 1) End Sub 

Шаг 8: Запустите код с помощью кнопки запуска. Как только мы запустим код, он запрашивает ввод для строки. Напишите в поле «ИНДИЯ — МОЯ СТРАНА» и нажмите «ОК», чтобы увидеть результат.

Объяснение функции разделения Excel VBA

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

Она очень похожа на другую функцию рабочего листа, но она лучше, так как может разбивать несколько слов и возвращать их в виде массива.

То, что нужно запомнить

Есть несколько вещей, которые мы должны помнить о функции разделения VBA:

  • Функция разделения VBA является функцией подстроки.
  • Возвращает вывод в виде строки.
  • Только выражение является обязательным аргументом, в то время как остальные аргументы являются необязательными.

Рекомендуемые статьи

Это руководство по разделению функций VBA. Здесь мы обсудили, как использовать функцию разделения VBA Excel вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Создание VBA While Loop
  2. Как разделить ячейку в Excel?
  3. VBA Do While Loop с примерами
  4. Обзор Excel слияния и центра

Понравилась статья? Поделить с друзьями:
  • Vba excel разбить строку по символу
  • Vba excel разбить строку по разделителям
  • Vba excel разбить строку на массив
  • Vba excel рабочий день
  • Vba excel рабочие дни