エクセルマクロでのセル範囲選択

ここではマクロでのセル範囲選択について記載します。
セル範囲選択といっても、rangeを使った書き方ならわかるけど、cellsを使う場合はどうすればいいの?
毎回同じ範囲ならいいけど、元データの範囲が毎回変わる場合の記述方法はどうすればいい?
など頭を悩ませている方もいるかもしれません。

このページでは基本的な記述、範囲が変わる場合の指定方法について記載していきます。

基本的な記述

例)セル範囲としてB2からD10までの範囲を選択する場合
・ rangeを使った書き方
 range(”B2:D10″).select

・ cellsを使った書き方
 range(cells(2,2),cells(10,4)).select
  cellsプロパティはセルを指定するものなので、範囲指定する場合はrangeを使って書くことになります。
  1つ目のcellsは範囲指定の左上部分を指定、
  2つ目のcellsは範囲指定の右上部分を指定することにより範囲選択となります。

 
 

変数を使用した応用編

選択範囲が毎回同じなら、何も構わずrange(“B2:D10”)と範囲指定すれば良いのですが、
ローデータを毎日取得するなどの場合は列は固定でも行数はどんどん増えていったりします
(前述の例でいうと、D10が次の日はD27、その次の日はD80になるなど)。

こういった場合は1番下の行が何行目かを確認して範囲指定します。

※ 1番下の行が何行目かを取得するーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
1番下の行を調べるにはendプロパティを使用します。
endプロパティはエクセルのショートカット「Ctrl + ↑」や「Ctrl + ↓」と同じ動きとなります。
(自動記録でも出てきますね)
引数には下記のいずれかが入ります。

引数 方向
xlup 上方向
xldown 下方向
xltoleft 左方向
xltoright 右方向

例えば、空白であるセルC40の位置からCtrl + ↑を押すとセルC40より上の行で、最初にデータが入っているセルが選択されると思います。

スポンサーリンク

これをマクロで書くと

cells(40,3).end(xlup)
セルC40からCtrl + ↑を押す

という記述になります。

今回のマクロは最終の”行”が知りたいので

cells(40,3).end(xlup).row
セルC40からCtrl + ↑を押したときの

これで行数が取得できます。
 
 
行数を取得するための変数を使用して書くと下記のようになります。

一番下の行取得
sub 一番下の行取得()
dim maxRow
maxrow = cells(40,3).end(xlup).row
msgbox maxrow
end sub

※ 40行目じゃ全然足りないよ!だと思うので、40の部分を”rows.count”にするとシートの行数をカウントした数になる(約100万行)のでrows.countを使用しましょう。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

1番下の行が何行目かを取得できたら、cellsで範囲指定すればOKです。

range(cells(2,2),cells(maxRow,4)).select

なぜEndプロパティを使う際にEnd(xlup)を使用するのか

先頭行からEnd(xldown)ではいけないの?という疑問がわくかもしれません。
これはケースバイケースなのですが、End(xldown)をする対象の列が絶対空白セルがないと言い切れる場合にはEnd(xldown)でよいと思っています。
私の場合は万が一を考えて、End(xlup)を使用しています。

よければ参考にしてみてください。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。