Vba excel проверка объединения ячеек

0 / 0 / 0

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

Сообщений: 5

1

Как узнать объединены ли ячейки

20.03.2012, 11:55. Показов 25586. Ответов 2


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

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



0



15136 / 6410 / 1730

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

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

20.03.2012, 12:05

2

cell.mergecells — входит в объединение или нет, true/false
cell.mergearea — диапазон объединения



0



0 / 0 / 0

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

Сообщений: 5

20.03.2012, 13:25

 [ТС]

3

Цитата
Сообщение от Казанский
Посмотреть сообщение

cell.mergecells — входит в объединение или нет, true/false
cell.mergearea — диапазон объединения

спасибо а можно в коде показать?

Добавлено через 32 минуты
все разобрался. благодарю



0



Не совсем понятна задача.
Проверить, объединена ли ячейка с другой (другими):

If Worksheets("Лист1").Cells(1, 3).MergeCells Then MsgBox "Таки да!"

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

Private Sub UserForm_Initialize()
Dim Rng As Range
Dim n
'        создать выпадающий список
    With Worksheets("Лист1")
        Set Rng = .Range("C1:H4") ' присвоить переменной диапазон "шапки" таблицы
    End With

    ' цикл по ячейкам
    For Each n In Rng.Value
        If n <> "" Then ' если в ячейке есть данные
            Me.ComboBox1.AddItem n ' добавить строку в список
        End If
    Next n
End Sub

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

Славик Шаров

@spark36

Полная комплектация: 2 руки, 2 ноги, голова, мозги

Как проверить диапазон ячеек объединен или нет?

Получаю в методе диапазон ячеек
Excel.Range cells = ws.Range[start, end];
Как можно проверить объединен ли он в одну ячейку или нет?


  • Вопрос задан

    более трёх лет назад

  • 586 просмотров


Комментировать

Пригласить эксперта


Ответы на вопрос 1

honor8

h8nor

@honor8

Принципы быстродействия VBA в описании

Если нужно проверить, объединена ли ячейка B1 с другими в один диапазон, то для VBA код будет:

merge = Cells(1, 2).MergeArea.Address(RowAbsolute:=False, ColumnAbsolute:=False)


Комментировать


Похожие вопросы


  • Показать ещё
    Загружается…

14 апр. 2023, в 19:53

3500 руб./за проект

14 апр. 2023, в 19:53

10000 руб./за проект

14 апр. 2023, в 19:46

1000 руб./в час

Минуточку внимания

I’m having quite an issue with this one — I have to detect horizontally and vertically merged cells from an excel table. I have to store the first cell coords, and the lenght of the merged area. I iterate through the table with two for-cycles, line by line.

How can I use MergeArea property to detect the merged and non-merged areas?
If the cell is not merged, it should probably return empty range, however, this:

«If currentRange Is Nothing Then»

is not working at all. Any ideas?
Thanks a lot.

asked Feb 27, 2014 at 17:32

zirael's user avatar

ziraelzirael

3931 gold badge3 silver badges4 bronze badges

1

2 Answers

There are several helpful bits of code for this.

Place your cursor in a merged cell and ask these questions in the Immidiate Window:

Is the activecell a merged cell?

? Activecell.Mergecells
 True

How many cells are merged?

? Activecell.MergeArea.Cells.Count
 2

How many columns are merged?

? Activecell.MergeArea.Columns.Count
 2

How many rows are merged?

? Activecell.MergeArea.Rows.Count
  1

What’s the merged range address?

? activecell.MergeArea.Address
  $F$2:$F$3

answered Feb 27, 2014 at 18:05

tbur's user avatar

tburtbur

2,3741 gold badge13 silver badges12 bronze badges

1

While working with selected cells as shown by @tbur can be useful, it’s also not the only option available.

You can use Range() like so:

If Worksheets("Sheet1").Range("A1").MergeCells Then
  Do something
Else
  Do something else
End If

Or:

If Worksheets("Sheet1").Range("A1:C1").MergeCells Then
  Do something
Else
  Do something else
End If

Alternately, you can use Cells():

If Worksheets("Sheet1").Cells(1, 1).MergeCells Then
  Do something
Else
  Do something else
End If

answered May 1, 2018 at 3:09

David Metcalfe's user avatar

David MetcalfeDavid Metcalfe

2,1471 gold badge27 silver badges43 bronze badges

Объединение диапазона ячеек в одну или построчно с помощью кода VBA Excel. Метод Range.Merge и свойство MergeCells. Отмена объединения ячеек. Примеры.

Метод Range.Merge

Метод Merge объекта Range объединяет ячейки заданного диапазона в одну или построчно из кода VBA Excel.

Синтаксис метода:

  1. Expression — выражение, возвращающее объект Range.
  2. Across — логическое значение, определяющее характер объединения ячеек:
    • True — ячейки объединяются построчно: каждая строка заданного диапазона преобразуется в одну ячейку.
    • False — весь диапазон преобразуется в одну ячейку. False является значением по умолчанию.

Преимущество метода Range.Merge перед свойством MergeCells заключается в возможности построчного объединения ячеек заданного диапазона без использования цикла.

Свойство MergeCells

Свойство MergeCells объекта Range применяется как для объединения ячеек, так и для его отмены.

Синтаксис свойства с присвоением значения:

Expression.MergeCells = Boolean

  1. Expression — выражение, представляющее объект Range.
  2. Boolean — логическое значение, определяющее необходимость объединения ячеек или его отмены:
    • True — объединение ячеек заданного диапазона.
    • False — отмена объединения ячеек.

С помощью свойства MergeCells можно из кода VBA Excel проверять диапазон (отдельную ячейку), входит ли он (она) в объединенную ячейку (True) или нет (False). Если проверяемый диапазон окажется комбинированным, то есть содержащим объединенные и необъединенные ячейки, компилятор сгенерирует ошибку.

Переменная Expression для отмены объединения ячеек с помощью свойства Range.MergeCells может представлять одну любую ячейку, входящую в объединенный диапазон.

Метод Range.UnMerge

Метод UnMerge объекта Range разделяет объединенную область на отдельные ячейки из кода VBA Excel.

Синтаксис метода:

Expression — выражение, возвращающее объект Range.

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

Примеры объединения ячеек и его отмены

Пример 1
Наблюдаем, как происходит объединение ячеек при разных значениях параметра Across:

Sub Primer1()

‘Объединяем ячейки диапазона «A1:D4» построчно

   Range(«A1:D4»).Merge (True)

‘Объединяем диапазон «A5:D8» в одну ячейку

‘Across принимает значение False по умолчанию

   Range(«A5:D8»).Merge

End Sub

Не забываем, что логическое выражение True можно заменить единичкой, а False — нулем.

Пример 2
Отменяем объединение ячеек в диапазонах из первого примера:

Sub Primer2()

   Range(«A1:D8»).MergeCells = False

End Sub

Пример 3
Предполагается, что перед этим примером отменено объединение ячеек кодом из предыдущего примера.

Sub Primer3()

‘Объединяем ячейки диапазона «A1:D4»

   Range(«A1:D4»).MergeCells = 1

‘Проверяем принадлежность диапазона

‘объединенной ячейке*

   MsgBox Range(«A1:C2»).MergeCells

   MsgBox Range(«A6:C7»).MergeCells

‘Ячейки диапазона «A5:D8»

‘можно объединить и так

   Cells(5, 1).Resize(4, 4).Merge

End Sub

*Если проверяемый диапазон окажется комбинированным, VBA Excel сгенерирует ошибку.
Пример 4
Отмена объединения ячеек с помощью метода Range.UnMerge:

Sub Primer4()

‘Объединяем ячейки диапазона «A1:C4»

    Range(«A1:C4»).Merge

    MsgBox «Ячейки диапазона ««A1:C4»» объединены»

‘Смотрим адрес диапазона, входящего в объединенную ячейку

    MsgBox Range(«A2»).MergeArea.Address

‘Отменяем объединение ячеек диапазона «A1:C4»

    Range(«B3»).UnMerge  ‘или: Range(«B3»).MergeArea.UnMerge

    MsgBox «Объединение ячеек диапазона ««A1:C4»» отменено»

End Sub

Предупреждение перед объединением

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

Пример 5
Наблюдаем появление предупреждающего окна:

Sub Primer5()

‘Отменяем объединение ячеек в диапазоне «A1:D4»

   Range(«A1:D4»).MergeCells = 0

‘Заполняем ячейки диапазона текстом

   Range(«A1:D4») = «Ячейка не пустая»

‘Объединяем ячейки диапазона «A1:D4»

   Range(«A1:D4»).MergeCells = 1

‘Наблюдаем предупреждающее диалоговое окно

End Sub

Предупреждающее окно перед объединением ячеек

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

Пример 6

Sub Primer6()

‘Отменяем объединение ячеек в диапазоне «A5:D8»

   Range(«A5:D8»).MergeCells = 0

‘Заполняем ячейки диапазона «A5:D8» текстом

   Range(«A5:D8») = «Ячейка не пустая»

Application.DisplayAlerts = False

   Range(«A5:D8»).MergeCells = 1

Application.DisplayAlerts = True

End Sub

Теперь все прошло без появления диалогового окна. Главное, не забывать после объединения ячеек возвращать свойству Application.DisplayAlerts значение True.

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

Like this post? Please share to your friends:
  • Vba excel проверка на пустую строку
  • Vba excel проверка на пустое значение
  • Vba excel проверка значения на дату
  • Vba excel проверка значения массива
  • Vba excel проверка если ячейка пустая