【VBA】知っておくと便利なEndプロパティ
こんにちは
今回はEndプロパティの説明です。
基本的なところなので知ってる人は多そうですが、一応説明します。
Endプロパティは簡単に説明すると選択したセルの終端を選択するものです。
簡単に説明するとセルを選択して[Ctrl]と[←]や[Ctrl]と[↓]を押したときに選択されるセルのことですね。
余談ですが、Excelを初めて触ったときに、Excelの終わりってどこなんだろうかとずっと右や下を押していた記憶がありますwそのときに教えてあげたかった知識ですね(遠い目)
下準備
あらかじめシートをこんな感じにしてみましょうか
下準備めっちゃ雑w
こんなんだから中級者だと(ry
例で作ってるだけなので真似される方は適当に作っちゃってください
実際に仕事で使う場合、何百何千と品名があり、数も変動するためいちいち何番まであるとか
サンプルプログラム
購入品のリストと在庫品のリストの比較を行ってみましょうか
もし在庫品名と購入品名が被った場合、購入品名のフォントを赤色にするといった感じにしましょう。
ではサンプルです。
Sub 比較() Dim i As Long Dim j As Long For i = 2 To Range("A2").End(xlDown).Row For j = 2 To Range("D2").End(xlDown).Row If Cells(i, 2) = Cells(j, 5) Then Cells(i, 2).Font.Color = RGB(255, 0, 0) Exit For Else Cells(i, 2).Font.Color = RGB(0, 0, 0) End If Next j Next i End Sub |
1行目:プロシージャの開始
2~3行目:変数宣言
4行目:なし
5行目:変数iのFor文開始(2~range("A2")の下方向終端の行数まで)
6行目:5行目同様変数jのFor文開始
7行目:Cells(i, 2) とCells(j, 5)の比較
8行目:条件が合致していれば購入リストの品名を赤にする
9行目:For文から抜ける
10行目:Else処理の開始
11行目:条件に不一致の場合、購入リストの品名を黒くする
12行目:If文の終了
13~14行目:変数を返す
15行目:プロシージャの終了
蛇足
Endプロパティによけいなものが付いてるけどあれって何?
Range("A2").End(xlDown).Row
この赤文字の所ですね。
これはRowプロパティといって指定されたセルの行番号を返しなさいという命令です。
読み方はロゥかな?
この場合、Range("A2")から[Ctrl]+[↓]へ行ったセルの行番号を返しなさいという事になります。
Rowが行番号なら列番号は何?
列番号を返す場合はColumn(コラム)ですね。
これも同じようにCellsやRangeの後ろに付けます。
RowsやColumnsがあるんだけど?
たまに打ち間違えるやつですねw
RowsやColumnsはRangeオブジェクトとして値を返します。
つまりRows(1)はRange("1:1")と同じ意味ですね。
Columns("3:5")はRange("C:E")と同じですね。
うーん、自分には使いこなせる気がしないw
右や左も.End(xlRight)や.End(xlLeft)になるの?
昔僕もやらかしましたが、左右の場合は変わってきます。
左右の場合はToが付くので注意しましょう。
プロパティ | 方向 |
---|---|
.End(xlUp) | 上:Ctrl+↑方向 |
.End(xlDown) | 下:Ctrl+↓方向 |
.End(xlToLeft) | 左:Ctrl+←方向 |
.End(xlToRight) | 右:Ctrl+→方向 |
ちなみにですが、下の図のようなケースが発生する場合があるかもしれませんね。
文字の入力されたセルの間に空白セルがまぎれている場合、終端行は空白セルの上の行になってしまいます。
これでは処理が中途半端で終わってしまいます。
この場合Range("A10000").End(xlUp).rowのように上から下の終端行を探すのではなく、下から上へ終端行を探すのもひとつの手ですね。
とはいえ、その終端行が空白だった場合も中途半端になってしまうため実行する前に確認したり、ミスを防ぐための処理を加える必要はありますね。