使用VBA使用Excel获取垂直合并单元格的起始范围和结束范围

vba*_*ser 14 excel vba excel-vba

我需要找出垂直合并单元格的第一个单元格和最后一个单元格.

假设我将Cell B2合并到B50.
如何在VBA中获取起始单元格(= B2)和结束单元格(= B50)?

小智 23

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
Run Code Online (Sandbox Code Playgroud)

  • 你也可以做`rng.MergeArea.Address` (2认同)

小智 6

下面的宏遍历工作簿中的所有工作表并找到合并的单元格,取消合并它们并将原始值放入所有合并的单元格.

这是数据库应用程序经常需要的,所以我想与您分享.

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
Run Code Online (Sandbox Code Playgroud)


Bra*_*ord 0

好吧,假设您知道合并范围中某个单元格的地址,您只需选择该范围中的偏移量并获取行/列:

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
Run Code Online (Sandbox Code Playgroud)

如果无法选择偏移行(即,如果合并的行是 A1 通过任何方式),上面的代码将引发错误,因此您需要添加错误处理来告诉代码如果无法向上偏移,则顶部行必须为 1如果不能往下走,那么最后一行一定是65,536。此代码也只是一维的,因此您可能还想添加 x 轴。