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
おまけ:より即席に
せっかくならスピードを極めましょう。
For Each cell In CtrlShift↓(Range("B3"))
これを、
For Each cell In CtrlShift↓([B3])
こう書き替えることができます。
Evalueteメソッドというもので、Range("")を[]に省略出来ます。
多用は禁物で、私はきっちり作るマクロでは絶対に使わないようにしていますが、
目の前の単発作業を瞬殺するためだけのマクロを書く際には、強い味方になります。
ついでに、
ふぇcs | ⇒ Dim cell As Range:For Each cell In CtrlShift↓() |
---|
という変換をユーザー辞書に入れておけばOK。
For Each Ctrl Shift の頭文字ですが、くしゃみみたいな読みですね(´∀`)