Как разъединить ячейки в excel vba

В программе 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.

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

Может и мой корявенький макрос кому-нибудь пригодится. Обрабатывает таблицу HTML, в которой в полях одной записи встречаются и объединенные и отдельные ячейки. В результате получается запись в одной строке, а лишние удаляются. Для наглядности кусочек исходной таблицы в файле.  
Sub UnMergeAndPack()    ‘ Если в поле А есть объединенные строки (ячейки) разъединяет их  
   Dim iCell As Range      ‘ а из необъединенных ячеек собирает текст в верхнюю ячейку.После этого  
   Dim nRow As Long        ‘ удаляет строки с пустыми ячейками в столбце А  
   Dim howRow As Integer  
   Dim endRow As Long  
   Dim nCol As Integer  
   Dim addRow As Long  
   Dim iLastRow As Long  
   Application.DisplayStatusBar = True  
   ‘Установка текста строки состояния.  
   Application.StatusBar = «Преобразование таблицы»  
   Application.ScreenUpdating = False                 ‘Отключить обновление экрана  
   iLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count  
   For Each iCell In Range(«A3:A» & iLastRow)  
       With iCell  
           If .MergeCells And .Address = .MergeArea.Cells(1).Address Then  ‘ Если ячейка Merge и она первая в Merge  
               nRow = iCell.Row                    ‘ номер первой строки в объкдиненной ячейке  
               howRow = .MergeArea.Rows.Count      ‘ кол-во строк в объединенной ячейке  
               endRow = nRow + howRow — 1          ‘ номер последней строки в объединенной ячейке  
                   For nCol = 1 To 7               ‘ обработка записи в полях  
                       If Cells(nRow, nCol).MergeCells = True Then ‘ Если ячейка объединенная,  
                           Cells(nRow, nCol).UnMerge   ‘ то разъединяем  
                           Else  
                              For addRow = nRow + 1 To endRow  ‘ если ячейки отдельные, то собираем из них текст в верхнюю ячейку  
                               Cells(nRow, nCol) = Cells(nRow, nCol) & Chr(10) & Cells(addRow, nCol)  
                              Next addRow  
                       End If  
                   Next nCol  
           End If  
       End With  
   Next  

         iLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count  
   Range(«A2», «G» & iLastRow).AutoFilter Field:=1, Criteria1:=»=», Operator:=xlFilterValues ‘ Фильтрация по «Пусто» в поле А  
   Range(«A3:A» & iLastRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete ‘ Удаление отфильтрованных строк  
   Range(«A2», «G» & iLastRow).AutoFilter ‘ Отключение автофильтра  

         ActiveSheet.UsedRange.Replace Empty, «insert», xlWhole ‘ Устанавливаем рабочую область  
   ActiveSheet.UsedRange.Replace «insert», Empty          ‘ по размерам таблицы  

         Columns(«B:G»).EntireColumn.AutoFit ‘ Автоподбор ширины ячеек  
   Cells.EntireRow.AutoFit             ‘ Автоподбор высоты ячеек  
Range(«H2»).Select  
   Application.ScreenUpdating = True  
   Application.StatusBar = False  

  End Sub

Правильно разъединить ячейки макросом

Модератор:Naeel Maqsudov

vadim245

Сообщения:99
Зарегистрирован:11 май 2007, 15:46

Нужно, чтобы при разъединении вертикально объединенных 3-х ячеек в каждой отдельной ячейке оказалось содержимое того, что было в объединенной ячейке.
Как?

Vikar

Сообщения:51
Зарегистрирован:24 апр 2007, 14:21

07 сен 2007, 14:14

Допустим объеденены ячейки A1:A3.
Тогда можно сделать так:

Код: Выделить всё

Sub Un_Merge()
    a = Cells(1, 1)
    Cells(1, 1).UnMerge
    Range(Cells(1, 1), Cells(3, 1)) = a
End Sub

Если нужно то же сделать с целым столбцом (или строкой), то вместо фиксированных значений a = Cells(1, 1) можно использовать переменные a = Cells(i, j) меняя их значения в цикле.

vadim245

Сообщения:99
Зарегистрирован:11 май 2007, 15:46

10 сен 2007, 07:43

Помогите пожалуйста с кодом — нужно работая только с выделенными ячейками —
разъединять (тоже чтоб то что было в общей ячейке попало во все три ячейки) последовательно идущие сверху вниз объединенные по 3 штуки.

Serge_Bliznykov

Сообщения:366
Зарегистрирован:31 авг 2007, 03:06

10 сен 2007, 10:30

vadim245 писал(а):Помогите пожалуйста с кодом — нужно работая только с выделенными ячейками —
разъединять (тоже чтоб то что было в общей ячейке попало во все три ячейки) последовательно идущие сверху вниз объединенные по 3 штуки.

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

Код: Выделить всё

Sub Un_Merge_AllSelected()
 Dim c As Range
 Dim ma As Range
 Dim a As Variant
 For Each c In Selection
    With c
      If .MergeCells Then
        Set ma = .MergeArea
        a = c.Value
        .MergeArea.UnMerge
        ma.Value = a
      End If
    End With
 Next
End Sub

Разъединить объединенную ячейку и заполнить данными.

Aleksej

Дата: Вторник, 16.08.2016, 07:22 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 69


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Всем доброго времени суток! :)

Нужна помощь знатоков VBA в написании макроса!

Задача:
1. Имеется файл Excel с объединенными ячейками (см. приложение)
2. Необходим макрос который находит объединенную ячейку, разъединяет её и во все получившиеся после разъединения ячейки записывает значение, которое было в объединенной ячейке. %)
3. В примере файла Excel: на листе1 исходные данные, на листе 2 как должно быть после применения макроса.

Спасибо! :)

К сообщению приложен файл:

3333333.xls
(49.5 Kb)

 

Ответить

Pelena

Дата: Вторник, 16.08.2016, 07:30 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
Последовательность действий такая:
— выделяем нужный диапазон (в примере А3:G29)
— снимаем объединение ячеек
— нажимаем F5 — Выделить — Пустые ячейки — ОК
— нажимаем на клавиатуре = и стрелку вверх. В строке формул должно получиться =A3
— нажимаем на клавиатуре сочетание Ctrl+Enter

Если нужен именно макрос, запишите действия макрорекодером
На эту тему можно посмотреть видео http://www.excelworld.ru/video….n_range


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Aleksej

Дата: Вторник, 16.08.2016, 07:39 |
Сообщение № 3

Группа: Пользователи

Ранг: Участник

Сообщений: 69


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Pelena,

Цитата

Если нужен именно макрос, запишите действия макрорекодером

Это если несколько ячеек то можно и так, а если их сотни или тысячи в файле, как сделать чтоб макрос нашел все и преобразовал? %)

 

Ответить

Pelena

Дата: Вторник, 16.08.2016, 07:43 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Какая разница? Выделите весь диапазон с данными (Ctrl+*)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Aleksej

Дата: Вторник, 16.08.2016, 07:44 |
Сообщение № 5

Группа: Пользователи

Ранг: Участник

Сообщений: 69


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Pelena,

Цитата

Какая разница? Выделите весь диапазон с данными (Ctrl+*)

Сори, все разобрался. Спасибо за помощь. :)

 

Ответить

Aleksej

Дата: Вторник, 16.08.2016, 07:53 |
Сообщение № 6

Группа: Пользователи

Ранг: Участник

Сообщений: 69


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Pelena,

Цитата

Выделите весь диапазон с данными

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

 

Ответить

Pelena

Дата: Вторник, 16.08.2016, 08:07 |
Сообщение № 7

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Тогда приведите более реальный пример


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

nilem

Дата: Вторник, 16.08.2016, 08:15 |
Сообщение № 8

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

можно так попробовать
[vba]

Код

Sub ertert()
Dim r As Range
For Each r In Range(«A3:G» & Cells(Rows.Count, 1).End(xlUp).Row)
    If r.MergeCells Then
        With r.MergeArea
            .UnMerge
            .Value = r.Value
        End With
    End If
Next r
End Sub

[/vba]
правда, на тысячах ячеек будет, видимо, тормозить


Яндекс.Деньги 4100159601573

 

Ответить

Aleksej

Дата: Вторник, 16.08.2016, 08:27 |
Сообщение № 9

Группа: Пользователи

Ранг: Участник

Сообщений: 69


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Pelena,

Цитата

приведите более реальный пример

Изменил исходный файл — ЛИСТ1.
Возможно, чтоб макрос сам находил только объединенные ячейки, разъединял и заполнял их? :(
Потому что реальный исходный файл, там тысячи строк. Выложить настоящий не могу по понятным причинам.

К сообщению приложен файл:

0557251.xls
(45.5 Kb)

 

Ответить

Aleksej

Дата: Вторник, 16.08.2016, 08:33 |
Сообщение № 10

Группа: Пользователи

Ранг: Участник

Сообщений: 69


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

nilem,

Цитата

можно так попробовать

Спасибо, вроде работает. :) На ошибки не проверял, но на первый взгляд все правильно. yes

Цитата

на тысячах ячеек будет, видимо, тормозит

Конечно не мгновенно, но это и не требуется. Ещё раз спасибо. :)

 

Ответить

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

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

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

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


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

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

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

2. Нажмите Главная > Слияние и центр > Разъединить ячейки. Смотрите скриншот:

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

4. Затем нажмите Главная > Найти и выбрать > Перейти к специальному. В Перейти к специальному диалоговое окно, выберите Пробелы вариант. Смотрите скриншот:

5, Затем нажмите OK, все пустые ячейки в диапазоне выбраны. Затем введите = и нажмите Up клавишу со стрелкой на клавиатуре. Смотрите скриншот:

6, Затем нажмите Ctrl + Enter ключей, все пустые ячейки были заполнены исходными объединенными данными. Смотрите скриншот:


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

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

1. Удерживайте ALT + F11 ключи, и он открывает Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модули, и вставьте следующий макрос в Модулиокно.

Sub UnMergeSameCell () 'Upadateby Extendoffice
Dim Rng As Range, xCell As Range xTitleId = "KutoolsforExcel" Установить WorkRng = Application.Selection Установить WorkRng = Application.InputBox ("Диапазон", xTitleId, WorkRng.Address, Type: = 8) Application.ScreenUpdating = False Application.DisplayAlerts = False для каждого Rng в WorkRng, если Rng.MergeCells Then With Rng.MergeArea .UnMerge .Formula = Rng.Formula End With End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

3, Затем нажмите F5 для запуска этого кода отображается диалоговое окно для выбора диапазона для работы, см. снимок экрана:

4. Нажмите OK, то объединенные ячейки не объединяются и автоматически заполняются исходными объединенными значениями.


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

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

После установки Kutools for Excel, вы можете сделать следующее:

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

2. Нажмите Кутулс > Слияние и разделение > Разъединить ячейки и заполнить значение, см. снимок экрана:

3. И объединенные ячейки были разделены и сразу заполнены повторяющимися значениями. Смотрите скриншоты:


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


Связанная статья:

Объединить соседние строки с одинаковыми данными в 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% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как разъединить ячейки без потери excel
  • Как разрешить редактирование в word всегда
  • Как разрешить редактирование в word 2019
  • Как разрешить редактирование в word 2016
  • Как разрешить редактирование в microsoft word

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии