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

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

офисный дно

1 / 1 / 1

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

Сообщений: 31

1

23.03.2013, 12:39. Показов 8176. Ответов 2


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

Здравствуйте! Ячейки c «A1» по «A10» объединены в одну. Есть ли способ разъединить это объединение так, чтобы вычленить только ячейку «A5», при этом чтобы объединенными остались ячейки с «A1» по «A4» и с «А6» по «А10». Пробовал Range(«A5»).UnMerge, но при этом разъединяются все ячейки.



0



Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

23.03.2013, 12:55

2

Либо так

Visual Basic
1
2
3
[a1].unmerge
[a1:a4].merge
[a6:a10].merge

Либо скопировать группу ячеек, объединенных нужным образом, и вставить формат в А1.



1



1 / 1 / 1

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

Сообщений: 31

23.03.2013, 14:11

 [ТС]

3

спасибо за ответ, немного не то, чего хотелось бы



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

23.03.2013, 14:11

3

Ячейки разЪединить / отменить объединение. И заполнить

Public Function UnMerge_And_Fill_By_Value(r As Range) _
        As Range
 
    ' разЪединить / отменить объединение ячеек
    ' и ячейки каждой бывшей объединённой ячейки
    ' заполнить значениями из их первых ячеек
 
    Dim address As String
    Dim ceLL As Range
 
    For Each ceLL In r.Cells
        With ceLL
            If .MergeCells Then
                address = .MergeArea.address
                .UnMerge
                Range(address).Value = .Value
            End If
        End With
    Next
 
    Set UnMerge_And_Fill_By_Value = r
 
End Function

Опубликовано InExSu

Автоматизация задач
Смотреть все записи автора InExSu


I have been given a fairly large database stored in Microsoft Excel, which I have to try convert into something useful.
However, one of the problems that I am encountering is that some of the data is merged together (horizontally in 2s).

For example;

row 1: [ x ][ x ][ x ][ x ][ x ]
row 2: [ x ][ x ][ o    o ][ x ]
row 3: [ o    o ][ x ][ o    o ]

Where x’s are single cells and o’s are merged together

What I want to do is unmerge all the rows (which I could do fairly easy with the unmerge button), but for where the merged cell was, have the data duplicated across the 2 cells.
From; [[ Some Data ]]
To; [ Some Data ][ Some Data ]

Thanks! Any help is appreciated.

eye_mew's user avatar

eye_mew

8,7557 gold badges30 silver badges50 bronze badges

asked Feb 9, 2012 at 16:45

H3katonkheir's user avatar

This is a VBA solution. This macro will search every cell in the active sheet to see if they are merged. If they are, it stores the range of the merged cells in a temp. range variable, unmerges the cells, then fills the range with the value of the first cell in the unmerged range (what the value was).

Sub UnMergeFill()

Dim cell As Range, joinedCells As Range

For Each cell In ThisWorkbook.ActiveSheet.UsedRange
    If cell.MergeCells Then
        Set joinedCells = cell.MergeArea
        cell.MergeCells = False
        joinedCells.Value = cell.Value
    End If
Next

End Sub

answered Feb 9, 2012 at 16:59

Gaijinhunter's user avatar

GaijinhunterGaijinhunter

14.5k4 gold badges50 silver badges57 bronze badges

3

  1. Select the range which has merged data
  2. Click on Merge and Centre to unmerge cells
  3. Select the range of data again
  4. Press Ctrl+G > Special > Blanks
  5. Press = and up arrow key
  6. Press Ctrl+Enter

answered Apr 14, 2015 at 15:59

Montells's user avatar

MontellsMontells

6,3494 gold badges47 silver badges50 bronze badges

You don’t need VBA for something like that.

  1. Select the range of the merged cells
  2. Unmerge the cells
  3. Home -> Find and Select -> Go to special… -> Blanks -> ok
  4. Type «=» move one cell up and press Ctrl + Enter

If R1C1 styles are enabled from:
File -> Options -> Formula -> R1C1 Reference style then

  1. Type «=R[-1]c» and press Ctrl + Enter

answered Jan 22, 2015 at 16:10

thanos.a's user avatar

thanos.athanos.a

2,0482 gold badges32 silver badges28 bronze badges

1

This is based on @aevanko ‘s answer, but generalized to an arbitrary Range.

Sub UnMergeRange(WorkRng As Range)
    Dim cell As Range, joinedCells As Range
   
    For Each cell In WorkRng
        If cell.MergeCells Then
            Set joinedCells = cell.MergeArea
            cell.MergeCells = False
            joinedCells.Value = joinedCells.Cells(1, 1).Value
        End If
    Next
End Sub

I also made a change because I came upon a corner case where it didn’t work. It’s when there’s a vertically merged cell that includes cells above the provided range. I had to use a slightly more advanced expression to get the value.

answered Feb 16, 2022 at 18:08

pgr's user avatar

pgrpgr

81410 silver badges27 bronze badges

I don’t know how to quickly implement the VBA code, but I used a formula to populate another column with the values… then I did the copy/paste magic of pasting values over the unmerged cells. This formula is based on the fact that the value is associated with the FIRST cell of the merged cells, and all others resolve to 0 (zero).

If Col. A2:A100 has the merged cells, I did the following:

  1. In Cell B2, I entered this formula: =IF(A2<>0,A2, B1)
  2. Copy the formula down to B100
  3. Copy/Paste VALUES ONLY to column C.
  4. Unmerge all of Column A.
  5. Copy Values from Column C into Column A.

Actually, you can simplify it to this series if you’re bold…

  1. Unmerge all of Column A
  2. In Cell B2, I entered this formula: =IF(A2<>0,A2, B1)
  3. Copy the formula down to B100
  4. Copy/Paste VALUES ONLY to column A

That skips the use of Column C…

Milo's user avatar

Milo

3,3379 gold badges29 silver badges44 bronze badges

answered Jul 12, 2019 at 16:08

David Martin's user avatar

here is another way to have data in all cells. I have a report that is published daily with merged cells, to avoid daily unmerging cells I refer to report with Power Query.

using Fill down option I can populate data to all cells in the merged range. Works for me! :)

Report view with marked FIll Down option

answered Apr 9, 2020 at 9:27

Jozef Bulat's user avatar

1

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

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

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


Содержание

  1. Разъединить ячейки и заполнить повторяющимися данными с помощью команды” Перейти к специальному “
  2. Разъединить ячейки и заполнить повторяющимися данными с помощью кода VBA.
  3. Разъедините ячейки и заполните повторяющиеся данные одним щелчком мыши
  4. Разъединить ячейки и заполнить повторяющимися данными с помощью Kutools for Excel

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

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

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

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

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

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

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

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


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

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

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

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

 Sub UnMergeSameCell () 'Upadateby ExtendofficeDim Rng As Range, xCell As RangexTitleId = "KutoolsforExcel" Установить WorkRng = Application.SelectionSet WorkRng = Application.InputBox ("Range", xTitleId, WorkRng.Address, Type  : = 8) Application.ScreenUpdating = FalseApplication.DisplayAlerts = FalseFor Every Rng In WorkRng If Rng.MergeCells Then With Rng.MergeArea .UnMerge .Formula = Rng.Formula End with End IfNextApplication.DisplayAlerts = TrueUplication.DisplayAlerts = TrueUplication.DisplayAlerts = TrueUplication.DisplayAlerts = TrueUplication.DisplayAlerts = TrueApplication.DisplayAlerts = TrueUplication.DisplayAlerts = TrueUplication.  > 

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

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


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

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

Kutools for Excel : с более чем 300 удобными надстройками Excel, можно попробовать бесплатно без ограничений в течение 30 дней .

Перейти к загрузке
Бесплатная пробная версия 30 днейПокупка
PayPal/MyCommerce

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

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

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

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


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

Kutools для Excel : с более чем 300 удобными надстройками Excel, попробуйте бесплатно без ограничений в течение 30 дней. Скачать и бесплатную пробную версию прямо сейчас!


Объединить соседние строки с одинаковыми данными в Excel


Like this post? Please share to your friends:
  • Vba excel разрывы страниц
  • Vba excel разрушительный сбой
  • Vba excel разработка макросов
  • Vba excel разницу во времени
  • Vba excel размеры ячейки