• 締切済み

ExcelVBAで、マージのコレクションの取得

ExcelVBAで、任意のセル範囲内に含まれる(完全に含まれる、一部が含まれるは問題視していません)結合セルのコレクションの取得って出来るのでしょうか?やっぱり、RangeのEachループで、MergeAreaの戻り値を検証するしかないのでしょうか?SpecialCellsメソッドみたいなので無いのでしょうか?宜しくお願いします。 例:Range("A1:"K30")のセル範囲を選択している状態で、その範囲内にRange("B2:C4")、Range("E9:F12)、Range("H16:H20")のセル範囲が結合状態にある場合にその結合されているセル範囲を取得したいのですが!!

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 コレクション(Collection)というのは、同系のオブジェクトの集合体で、ワークシートのRange オブジェクトは、どんなに収集しても、コレクションにならなかったと思います。どこかの教本で読んだ覚えがあります。 >その結合されているセル範囲を取得したいのですが!! それは、単なるエリアであり、Range オブジェクトだと思います。 つまらない話を書きましたが、コードも一緒につけておきます。 Sub getMargeCells()   Dim c As Range   Dim ur As Range   On Error GoTo ErrHandler   For Each c In ActiveSheet.Range("A1:K30")     If c.MergeCells Then       Set ur = Union(ur, c.MergeArea)     End If   Next c   ur.Select   Set ur = Nothing   Exit Sub ErrHandler:   Set ur = c   Resume Next End Sub

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

こんにちは。 >SpecialCellsメソッドみたいなので無いのでしょうか? ないようですね。 以下は、RangeをFor Eachループで取得する例です。ご参考に・・・ Sub MergeCell取得()   Dim wRange   As Range   Dim c     As Range   '   Set wRange = Nothing   With ActiveSheet     For Each c In .Range("A1:K30")       If c.MergeCells Then         'MsgBox c.Address & " " & c.MergeArea.Address         If wRange Is Nothing Then           Set wRange = .Range(c.Address(1, 1))         Else           Set wRange = Application.Union(wRange, .Range(c.Address(1, 1)))         End If       End If     Next   End With   If Not wRange Is Nothing Then     MsgBox wRange.Address   End If End Sub

関連するQ&A