cr(カレントリージョン)で、2つおきの行を削除する。

f:id:bimori466:20210504162812p:plain

cr(カレントリージョン)の普及活動!

cr(カレントリージョン)って何?と思われるでしょう。一言でいうと、セルの範囲操作が容易になります。
この記法は「ほえDX塾」で教わったものです。ブログへの記載OKということなので、この便利さを伝えたいなと思います。
気が向いたら、シリーズ化します。

1 閲覧対象者

crの記法を学んで、セルの範囲操作の幅を広めたい人。

2 得られる効果

セルの範囲(Range)を簡単に操作することができる。

3 演習問題

以下のような表があります。

f:id:bimori466:20210504154949p:plain

演習問題
・この表から2つおきの行を選択してください。


正直、この問いへの答えが出せませんでした。For Nextでループさせても、Selectしたままにできんな~(;^ω^)とお手上げでした。
そんなときcr(カレントリージョン)がすごく便利なのです。久々にコードを見て感動しました。


ちなみにこの問いに対する正解は、以下の画像の状態です。
f:id:bimori466:20210504155626p:plain


2,4,6、~12の行を選択します。ここまでみなさんは回答のコードを作れますか?
ではでは、回答のコードは次の章です。

4 コードの解説

Sub cr_Union()

    Dim cr As Range: Set cr = Range("A1").CurrentRegion
    Dim i As Long
    Dim myRange As Range
    
    For i = 2 To cr.Rows.Count Step 2
        If i = 2 Then
            If myRange Is Nothing Then
                Set myRange = cr.Rows(i)
            End If
            
        Else
            Set myRange = Union(myRange, cr.Rows(i))
        End If
    Next
    
    myRange.Select
        
End Sub


変数crにRange("A1").CurrentRegionの範囲をセットします。
初期値2で「For next Step 2」でループ処理します。
変数myRangeにcrの行を格納していきます。ポイントは、myRangeの初期状態は「Nothing」となっているので、1回目のSetで範囲を設定するときはNothingかどうかの判定が必要です。
2回目以降は、myRangeに「Union(myRange, cr.Rows(i))」で追加格納していきます。
このようにして、2行おきのデータを格納していきます。
そして、最後の「myRange.Select」で選択します。

これが問題の回答コードとなります。

5 2行おきのデータを削除する

ここからは、crを応用した処理です。

crからmyRangeでセルを選択できました。次に、myRangeを削除してみましょう。削除するには、以下のコードです。

Sub cr_Union()

    Dim cr As Range: Set cr = Range("A1").CurrentRegion
    Dim i As Long
    Dim myRange As Range
    
    
    For i = 2 To cr.Rows.Count Step 2
        If i = 2 Then
            If myRange Is Nothing Then
                Set myRange = cr.Rows(i)
            End If
            
        Else
            Set myRange = Union(myRange, cr.Rows(i))
        End If
    Next
    
    myRange.Select
    myRange.Delete
        
End Sub


「myRange.Delete」を追加するだけです。


処理した状態が以下の画像です。
f:id:bimori466:20210504161923p:plain


myRangeの範囲のデータが削除されます。
普通、2行おきのデータを削除するというと「For next Step -1」でDeleteしていくのではないでしょうか?
しかし、crを使えば指定の範囲を分かりやすいイメージで削除できます。

6 感想

いかがだったでしょうか?セルの範囲選択といっても奥が深いと思いました。cr(カレントリージョン)を使うことで指定の範囲への操作が容易となります。
次回は、複数のmyRangeを取得して並び替える処理について記事を書こうと思います。


ではでは、この辺で(^^)/~~~