Получить начальный и конечный диапазоны вертикально объединенной ячейки с помощью Excel с помощью VBA - PullRequest
13 голосов
/ 01 июня 2010

Мне нужно выяснить первую ячейку и последнюю ячейку вертикально объединенной ячейки ..

Допустим, я объединяю ячейки B2 с B50.
Как я могу получить в VBA начальную ячейку (= B2) и конечную ячейку (= B50)?

Ответы [ 5 ]

22 голосов
/ 02 июня 2010
Sub MergedAreaStartAndEnd()

    Dim rng As Range
    Dim rngStart As Range
    Dim rngEnd As Range

    Set rng = Range("B2")

    If rng.MergeCells Then

        Set rng = rng.MergeArea
        Set rngStart = rng.Cells(1, 1)
        Set rngEnd = rng.Cells(rng.Rows.Count, rng.Columns.Count)

        MsgBox "First Cell " & rngStart.Address & vbNewLine & "Last Cell " & rngEnd.Address

    Else

        MsgBox "Not merged area"

    End If

End Sub
6 голосов
/ 01 декабря 2012

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

Это часто требуется для приложений БД, поэтому я хотел поделиться с вами.

Sub BirlesenHucreleriAyirDegerleriGeriYaz()
    Dim Hucre As Range
    Dim Aralik
    Dim icerik
    Dim mySheet As Worksheet

    For Each mySheet In Worksheets

    mySheet.Activate
    MsgBox mySheet.Name & “ yapılacak…”

    For Each Hucre In mySheet.UsedRange
        If Hucre.MergeCells Then
           Hucre.Orientation = xlHorizontal
           Aralik = Hucre.MergeArea.Address
           icerik = Hucre
           Hucre.MergeCells = False
           Range(Aralik) = icerik
        End If
    Next

 MsgBox mySheet.Name & " Bitti!!"

 Next mySheet
End Sub
0 голосов
/ 05 апреля 2018

Предположим, вы объединили B2 до B50.

Тогда начальный адрес ячейки будет:

MsgBox Range("B2").MergeArea.Cells(1, 1).Address

Конечный адрес ячейки будет:

With Range("B2").MergeArea
    MsgBox .Cells(.Rows.Count, .Columns.Count).Address
End With

Вы можете поместить адрес любой ячейки объединенной области вместо B2 в приведенном выше коде.

0 голосов
/ 01 июня 2010

Если вы хотите, чтобы ссылки на ячейки представляли собой строки, вы можете использовать что-то вроде этого, где Location, StartCell и EndCell являются строковыми переменными.

Location = Selection.Address(False, False)
Colon = InStr(Location, ":")
If Colon <> 0 Then
    StartCell = Left(Location, Colon - 1)
    EndCell = Mid(Location, Colon + 1)
End If

Если вы хотите установить их как диапазоны, вы можете добавить это, где StartRange и EndRange являются объектами Range.

set StartRange = Range(StartCell)
set EndRange = Range (EndCell)
0 голосов
/ 01 июня 2010

Итак, если вы знаете адрес одной из ячеек в объединенном диапазоне, вы можете просто выбрать смещение из этого диапазона и получить строку / столбец:

Sub GetMergedRows()
    Range("A7").Select 'this assumes you know at least one cell in a merged range.
    ActiveCell.Offset(-1, 0).Select
    iStartRow = ActiveCell.Row + 1
    Range("A7").Select
    ActiveCell.Offset(1, 0).Select
    iEndRow = ActiveCell.Row - 1
    MsgBox iStartRow & ":" & iEndRow
End Sub

Приведенный выше код будет выдавать ошибки, если нельзя сместить строку смещения (т. Е. Если объединенные строки от А1 до любого другого), поэтому вы захотите добавить обработку ошибок, которая сообщает коду, если он не может смещаться вверх, верхние строки должно быть 1, и если он не может идти вниз, нижний ряд должен быть 65 536. Этот код также является одномерным, так что вы можете добавить и ось X.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...