(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【ExcelVBA】結合されたセルの左上と右下のアドレスを取得する

スポンサーリンク

やりたいこと

以下のように結合されたセルがB2:C2E2:E4に存在する場合に

A B C D E
1
2 きく

3
4

それらのセルのアドレス情報をVBAにて取得したい。

環境情報
  • Microsoft Visual Basic for Applications 7.1

やり方

以下のように記載することで

For c = 1 to 10
For r = 1 to 10
 If Cell(r,c).MergeCells Then
  x = Cells(r,c).Address(False,False)
  y = Range(x).MergeArea.Address(False,False)
  Debug.Print y
 End If
Next r
Next c

イミディエイトウィンドウに以下が表示される。

B2:C2
B2:C2
E2:E4
E2:E4
E2:E4


以下、補足です。

補足

結合されたセルの判定をするだけであれば

Cells(r, c).MergeCells

で行えますが、その範囲を取得しようとするとRangeのMergeAreaを利用する必要があります。
そのため、今回は一度CellsをAddressに変換した上で同関数を用いました。

尚、連続して出力している箇所は自セルと左上のセルが一致しているか否かの条件分岐をすることで一度きりの出力にも可能です。形式としては:区切りで左上と右下のアドレスが格納されているので、個別に取得したい場合は以下のように区切り文字を指定して分離できました。

  FindNo = InStr(y, ":")
  Debug.Print Left(y, FindNo - 1)
  Debug.Print Right(y, Len(y) - FIndNo)

以上。