01-VBA

ExcelVBAのEndプロパティ(2)| 現役エンジニア&プログラミングスクール講師

目標

ExcelVBAのEndプロパティを理解して操作できる

ExcelVBAではプロパティを知るとかなり多くの処理を自動で行わせることができます。加えて、VBAのプログラミング学習では変数や制御構造を学ぶ前にいろいろな設定を経験すると制御構造や様々なデータ構造の学習に入ったときに、オブジェクトやプロパティについて悩まなくてもよくなるので学習効率が良くなります。

ExcelVBAでよく使う「9つのプロパティ」

プロパティ(アルファベット順)
ActiveSheet
ActiveCell
Cells
End ※今回の記事で扱うプロパティです。
Offset
Range
Sheets
Value
Worksheets

Endプロパティの概要と利用方法

Endプロパティとは

Endプロパティはエクセルのワークシート内でデータが入力されている表の末端(終端)のセルを取得します。組み込み定数によって右端、左端、上の端、下の端を取得することができます。

オブジェクト.End(方向を示す組み込み定数)

組み込み定数記述例移動の方向キーボードでの操作
xlUpRange(“C6”).End(xlUp).SelectCtrl + ↑
xlDownRange(“C6”).End(xlDown).SelectCtrl + ↓
xlToRightRange(“C6”).End(xlToRight).SelectCtrl + →
xlToLeftRange(“C6”).End(xlToLeft).SelectCtrl + ←

VBAの記述例として上下左右方向への動きをいずれも「セルC6」をアクティブセルとしてから移動させてみます。前回の「Ctrl+矢印キー」の移動と同様の動きを確認できます。

Sub practiceEnd()

    Worksheets("Sheet4").Activate
    Range("C6").Select
    MsgBox "C6を選択しました"
    Range("C6").End(xlUp).Select
    MsgBox "上方向へ移動しました"
    
    Range("C6").Select
    MsgBox "C6を選択しました"
    Range("C6").End(xlDown).Select
    MsgBox "下方向へ移動しました"
    
    Range("C6").Select
    MsgBox "C6を選択しました"
    Range("C6").End(xlToRight).Select
    MsgBox "右方向へ移動しました"
    
    Range("C6").Select
    MsgBox "C6を選択しました"
    Range("C6").End(xlToLeft).Select
    MsgBox "左方向へ移動しました"
    
End Sub

操作後の動きを画面キャプチャで一枚ずつ見ていくと下のようになります。

記述例と動きについては以上です。

Endプロパティ使用時の注意点

Endプロパティの後は.Selectを(Selectメソッド)を付け忘れないようにします。※Selectメソッド以外にもオブジェクトが続くときがあります。

記述例:Range(“B3”).End(xlDown).Offset(1, 0).Select

意 味:セルB3から表の最下段へ移動してひとつ下の空白セルを選択する

組み込み定数記述例移動の方向キーボードでの操作
xlUpRange(“C6”).End(xlUp).SelectCtrl + ↑
xlDownRange(“C6”).End(xlDown).SelectCtrl + ↓
xlToRightRange(“C6”).End(xlToRight).SelectCtrl + →
xlToLeftRange(“C6”).End(xlToLeft).SelectCtrl + ←

Endプロパティのよく使うパターン

Endプロパティを利用するパターンとして「表の最下段へのセル移動」は頻度としても高いと思います。

ここでは「① 表の最下段へのセルの移動 」+「② ひとつ下の空白セルへの移動」+「③ 一件のレコード入力」を行ってみたいと思います。

サンプルプロシージャ

Sub AddRecord()

    Dim LN As Integer
    
    Worksheets("Sheet4").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Select
    LN = ActiveCell.Row
    
    Cells(LN, 2).Value = "29"
    Cells(LN, 3).Value = "電気代"
    Cells(LN, 4).NumberFormatLocal = "\##,###"
    Cells(LN, 4).Value = ""
    Cells(LN, 5).NumberFormatLocal = "\##,###"
    Cells(LN, 5).Value = "6237"
    Cells(LN, 6).FormulaR1C1 = "=R[-1]C + RC[-2] - RC[-1]"

End Sub

プログラムの解釈

RowsやRow、Countについて補足的に説明をくわえると以下のようになります。

AddRecordという名前でプロシージャの宣言

Sub AddRecord()

LNをInteger型で宣言「LN = ActiveCell.Row」で利用する

Dim LN As Integer

WorkSheetのSheet4で

Cells(Rows.Count,2)を指定して

※ Cells(Rows.Count,2)のRows.Countはシートの一列に存在するセルの総数を数えています。現在のExcelでは1048576個なので、読み替えるとCells(1048576, 2) →「セルB1048576」を指定しています。

End(xlUp)で上方向の値のあるセルまで移動

→今回の実行時にはB11となります。

Offset(1,0).Selectでひとつだけセルを下へ移動

→今回の実行時にはB12となります。

以上を1行で書くと下のような記述になります。

Worksheets(“Sheet4”).Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Select

アクティブセルのRow(上から何番目のセルか)を数えてLNへ入力
→今回の場合は「LN=12」となります。
LN = ActiveCell.Row

Cells(LN, 2).Value = “29”
Cells(LN, 3).Value = “電気代”
Cells(LN, 4).NumberFormatLocal = “\##,###”
Cells(LN, 4).Value = “”
Cells(LN, 5).NumberFormatLocal = “\##,###”
Cells(LN, 5).Value = “6237”
Cells(LN, 6).FormulaR1C1 = “=R[-1]C + RC[-2] – RC[-1]”
End Sub

実行結果

無事に表の最下段に新しいデータが入力されました。

今回は以上となります。

ExcelVBAのEndプロパティ(1)| 現役エンジニア&プログラミングスクール講師ExcelVBAのEndプロパティについて説明しています...
初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】| 現役エンジニア&プログラミングスクール講師「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
01-VBA

Excel VBA の「オブジェクト活用」(Part.1)【ワークシートと行列の活用編】| 現役エンジニア&プログラミングスクール講師

2022年12月14日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

初めてのExcelVBA:開発タブの表示 | 現役エンジニア&プログラミングスクール講師

2022年8月5日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の エラー処理(Part.1)| 現役エンジニア&プログラミングスクール講師

2022年12月26日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

ExcelVBAの変数 (Part.1) 基本編 | 現役エンジニア&プログラミングスクール講師

2022年9月13日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の イベント編(Part.1)3つのプロシージャ /引数のByVal(値渡し)とByRef(参照渡し)| 現役エンジニア&プログラミングスクール講師

2022年12月29日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

制御構文|Excel VBA (Part.9)【Do Loop】基本編 | 現役エンジニア&プログラミングスクール講師

2022年11月30日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site