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
0 |
0 / 0 / 0 Регистрация: 02.03.2012 Сообщений: 5 |
|
20.03.2012, 13:25 [ТС] |
3 |
cell.mergecells — входит в объединение или нет, true/false спасибо а можно в коде показать? Добавлено через 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
Принципы быстродействия 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
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
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 MetcalfeDavid Metcalfe
2,1471 gold badge27 silver badges43 bronze badges
Объединение диапазона ячеек в одну или построчно с помощью кода VBA Excel. Метод Range.Merge и свойство MergeCells. Отмена объединения ячеек. Примеры.
Метод Range.Merge
Метод Merge объекта Range объединяет ячейки заданного диапазона в одну или построчно из кода VBA Excel.
Синтаксис метода:
- Expression — выражение, возвращающее объект Range.
- Across — логическое значение, определяющее характер объединения ячеек:
- True — ячейки объединяются построчно: каждая строка заданного диапазона преобразуется в одну ячейку.
- False — весь диапазон преобразуется в одну ячейку. False является значением по умолчанию.
Преимущество метода Range.Merge перед свойством MergeCells заключается в возможности построчного объединения ячеек заданного диапазона без использования цикла.
Свойство MergeCells
Свойство MergeCells объекта Range применяется как для объединения ячеек, так и для его отмены.
Синтаксис свойства с присвоением значения:
Expression.MergeCells = Boolean |
- Expression — выражение, представляющее объект Range.
- 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 предупреждающее окно не показывается, это не означает, что оно игнорируется. Просто программа самостоятельно принимает к действию ответное значение диалогового окна по умолчанию.