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

时间:2010-06-01 15:32:48

标签: excel-vba vba excel

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

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

6 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分: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

答案 2 :(得分: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

如果无法选择偏移行,上面的代码将抛出错误(即,如果合并的行是A1通过什么),那么你将需要添加错误处理,告诉代码它是否无法向上偏移,顶行必须为1,如果不能下降,则底行必须为65,536。此代码也只是一维,因此您可能还想添加x轴。

答案 3 :(得分:0)

如果您希望将单元格引用作为字符串,则可以使用类似这样的内容,其中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)

答案 4 :(得分:0)

假设您将B2合并到B50。

然后,开始单元格地址将是:

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

结束单元格地址为:

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

您可以在上面的代码中将合并区域的任何单元格的地址放在B2的位置。

答案 5 :(得分:0)

如果要遍历合并的单元格,请尝试此操作。

Sub LoopThroughMergedArea()
    Dim rng As Range, c As Range

    Set rng = [F5]

    For Each c In rng.MergeArea
        'Your code goes here
        Debug.Print c.Address'<-Sample code
    Next c
End Sub