我需要找出垂直合并单元格的第一个单元格和最后一个单元格。
假设我将Cell B2合并到B50 如何在VBA中获取起始单元格(= B2)和结束单元格(= B50)?
答案 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