派遣事務員の迷走

派遣事務員コロ子。会社の犬。顔出しNG。常に迷走している。

VBA 結合セルを扱う(正しい方法)

こんにちは。
派犬事務員のコロ子です。

前回の記事を書いたら、MergeAreaプロパティを使えばいいんじゃない?
と教えて頂いた。

koroko.hatenablog.com


MergeAreaプロパティ、こんな便利なものがあったなんて!!!

「練習のために○○は使わないでコードを書いてみましょう」的な事をしているのではなくて、素で知らなかった。
知らないと「VBA道場で修行的なコード」「体育会系に鍛錬的なコード」になっちゃう。修行も鍛錬も好きじゃないからー!!

f:id:SNegishi:20210209223635p:plain

MergeAreaプロパティは「結合されているセル範囲のRangeオブジェクトを返す」とのことなので、例えば
Range("B6").MergeArea(1).Value
と書くとB6セルを含む結合範囲の1番目のセルの値が取得できる。
ちなみに
Range("B4:B10").MergeArea.Value
とか
Range("B4:B10").MergeArea(1).Value
と書きたくなるけど
Range("B6").MergeArea(1).Value
Rangeの中身は単独セルを書かないといけない。

では、早速MergeAreaプロパティを使って書き直そう。

Sub Test1()

Dim ran As Range

For Each ran In Range("D4:H17")

    Debug.Print "日付:" & _
                Cells(2, ran.Column).MergeArea(1).Value & _
                Cells(3, ran.Column).Value
                
    Debug.Print "サンプル名:" & _
                Cells(ran.Row, 2).MergeArea(1).Value
                
    Debug.Print "ロット番号:" & _
                Cells(ran.Row, 3).MergeArea(1).Value
                
    Debug.Print "データ:" & ran.Value

Next ran

End Sub

えっつ!!これだけ?超簡単じゃん!
めちゃめちゃスッキリ!