Ctrl + Shift + ↓によるセル範囲の選択はとても便利です。
VBAでも使いたいですよね。
さてこれをVBAで取得する方法ですが、
残念ながら一発でやるプロパティは無い様です。
専用のプロパティはないですが、地道に取得するコード自体は簡単で、
Set 目的のセル範囲 = Range(始点セル, 始点セル.End(xlDown))
これでOKです。
このコードで使用したように、Ctrl + ↑←↓→はプロパティが用意されています。
最終行取得でもおなじみの、Endプロパティですね。
しかし、これに「Shiftキー」の効果も付け足したプロパティは、
私の知る限りありません。
ResizeEndプロパティみたいなものが、あったらいいんですけどね。
無いものはしょうがないので、スタートのセルと、Endプロパティで取得したセルを、ストレートにRangeプロパティで繋げましょう。
おそらくこれが、このセル範囲を取得する一番簡単な方法だと思います。
この操作をマクロ記録しても、これが出てきますしね。
無ければ作ればいい
上記のコードはそこそこ簡単ですが、Excel上でやる「Ctrl+Shift+↓」の手軽さと比べると、ちょっと面倒に感じてしまいます。
同じセルを2回書くから、セルの指定がCells(R, C)だとゴチャゴチャしますし。
ということで、Ctrl+Shift+↓を本家に劣らず簡単に実行できるように、汎用関数にしちゃいましょう。
Function CtrlShift↓(始点セル As Range) As Range If 始点セル.Value = "" Or 始点セル.Offset(1).Value = "" Then Set CtrlShift↓ = 始点セル Else Set CtrlShift↓ = Range(始点セル, 始点セル.End(xlDown)) End If End Function
ほとんど先ほどのコードそのままです。
自分自身や、1つ下のセルが空セルで、Endプロパティがシートの終端まで飛んでしまうことを防ぐコードだけ追加しています。
この関数を作っておけば、
' 例:B列のマイナス値を赤字に Dim cell As Range For Each cell In CtrlShift↓(Range("B3")) If cell < 0 Then cell.Font.Color = RGB(255, 0, 0) Next
みたいに、即席のコードを高速コーディングできます。
しかもすごく読みやすい!
ぜひ活用してみてください。
ついでにどうぞ。
Function CtrlShift→(始点セル As Range) As Range If 始点セル.Value = "" Or 始点セル.Offset(, 1).Value = "" Then Set CtrlShift→ = 始点セル Else Set CtrlShift→ = Range(始点セル, 始点セル.End(xlToRight)) End If End Function
余談ですが、関数名には日本語だけでなく、今回のように記号も使えます。
流石に矢印以外はめったに使いませんけどね。
例えば「Sub データ→請求書」みたいに、↑→↓←を使うと読みやすくなる場面は結構あります。
気が向いたら使ってみてください。
おまけ:即席コーディングを補助する機能
こういう即席コードを早く書く関数を作ったらなら、
さらに書くスピードを極めてみるとよいです。
「あるセルからCtrl+Shift+↓で取得できるエリアの全セルをループ処理」
はかなり頻出のコードなので、このコードをまるごとユーザー辞書に登録してしまいましょう。
ふぇcs | ⇒ Dim cell As Range:For Each cell In CtrlShift↓() |
---|
という変換をユーザー辞書に入れておけばOK。
これでこのコードを数キーのタイプで作り始めることができます。
読みはFor Each Ctrl Shift の頭文字ですが、くしゃみみたいな読みですね(´∀`)