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)
小智 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)
好吧,假设您知道合并范围中某个单元格的地址,您只需选择该范围中的偏移量并获取行/列:
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 轴。