Предположим, у вас есть пустой лист, и к диапазону A1: F1 применен формат «объединить и центрировать». Если вы выберете столбец B, щелкнув заголовок столбца, Excel послушно выберет столбец B и сделает ячейку B2 активной. Это поведение было изменено в Excel 2000 или Excel 2002; в предыдущих версиях Excel вы получали объединенную ячейку (A1: F1)

включены в подборку.

По-видимому, VBA несколько отстает от поведения пользовательского интерфейса, поскольку выбор всего столбца B также приводит к выбору всех столбцов, от A до F:

Sub TestMacro1()

Range("B3").EntireColumn.Select End Sub

Кажется, это поведение невозможно обойти. Даже если вы исключите метод CompleteColumn и просто выберете столбец B, вы все равно получите все столбцы, от A до F:

Sub TestMacro2()

Range("B:B").Select End Sub

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

Sub TestMacro3()

Range("B3").EntireColumn.Font.Bold = True End Sub

Это влияет только на ячейки в столбце B и ничего не влияет на ячейки от A или C до F. Аналогичным образом можно использовать итерационный подход для обработки ячеек в нужном столбце:

Sub TestMacro4()

Dim rCell As Range     Dim X As Long

X = 1     For Each rCell In Range("B:B")

rCell.Value = X         X = X + 1     Next End Sub

Это вставляет значение в каждую ячейку столбца B и игнорирует любые слияния, которые включают ячейку в столбце B.

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

Sub TestMacro5()

Range("B3").EntireColumn.Select     If Selection.MergeCells Then         Exit Sub     End If ' ' Perform rest of macro ' End Sub

К сожалению, тестирование показывает, что этот код работать не будет. Свойство MergeCells, по-видимому, возвращает True только в том случае, если весь выбор состоит из объединенных ячеек, а не если выбор содержит только несколько объединенных ячеек. Это означает, что вам предоставляется другой способ определить, изменили ли объединенные ячейки предполагаемый выбор, например:

Sub TestMacro6()

Range("B3").EntireColumn.Select     If Selection.Columns.Count > 1 Then         Exit Sub     End If ' ' Perform rest of macro ' End Sub

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

_Примечание: _

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

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (3093) относится к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Selecting_Columns_in_VBA_when_Cells_are_Merged [Выбор столбцов в VBA при объединении ячеек].