派遣事務員の迷走

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

VBA 罫線で囲まれた範囲を取得する(田んぼRange)

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

よくありがちなこんな表。

f:id:SNegishi:20211004223057p:plain

罫線で囲まれた表の外に自由に書き込みがされている。
表の中に空白行があるけど、区切りの意味があるらしく、勝手に削除できない。
この状態に手は加えず、表だけを取得したい。

UsedRange だと、枠の外も使用範囲が全部になってしまう。
f:id:SNegishi:20211004223757p:plain


Range("C3").CurrentRegion だと、連続している範囲になってしまう。
f:id:SNegishi:20211004224053p:plain


罫線で囲まれた範囲だけ取得する関数とかあっても良さそうだけどなー。
ないっぽいので自作してみよう。

Sub Test()

    田んぼRange(Sheet1).Select

End Sub


Function 田んぼRange(ws As Worksheet) As Range
    
    Dim linRange As Range

    Dim ran As Range
    For Each ran In ws.UsedRange
    
        If ran.Borders.LineStyle = xlContinuous Then
        
            If linRange Is Nothing Then
                Set linRange = ran
            Else
                Set linRange = Union(linRange, ran)
            End If

        End If
    
    Next ran

    Set 田んぼRange = linRange

End Function

枠全てに罫線が引かれているセルをUnion関数で繋げて範囲を取得する。

f:id:SNegishi:20211005221504p:plain

できた!
罫線で囲まれた範囲を田んぼRangeと命名しよう。
(ネーミングがダサい?でも分かりやすいでしょ!ちゃんとした名前あるのかな?)
田んぼRange、もしかしたらUsedRangeやCurrentRegionよりもニーズがあるかも!?