目次
目的
- あるセルを基準にして Excel のワークシートに入力されているデータの上下左右の端を選択したい。
- データが何行目まで入力されているか知りたい。
以下の画像を例にしますと・・・
基準セル = D4
上端のセル = D2
下端のセル = D6
左端のセル = B4
右端のセル = F4
になります。これはキーボードショートカットの Ctrl + ↑↓←→ と同じ動作になると思います。これと同じ動作を Excel VBA のマクロで行ってみたいと思います。
その方法の一例
以下 4 つのマクロは上下左右端のセルを選択するマクロです。 End プロパティというものを使用しています。 End() プロパティのパラメータは、 xlUp 、 xlDown 、xlToLeft 、 xlToRight の 4 タイプを指定可能です。
Excel VBA のソースコード例:
Sub ExcelVBA_002467_上端のセルを選択()
Range("D4").End(xlUp).Select '「D4」セルを基準にして「上端」のセルを選択します。
End Sub
「 Range("D4").End(xlUp).Select 」の行で、 D4 セルを基点にして、上端のセルを選択しています。 D2 セルが選択状態になると思います。
Excel VBA のソースコード例:
Sub ExcelVBA_002467_下端のセルを選択()
Range("D4").End(xlDown).Select '「D4」セルを基準にして「下端」のセルを選択します。
End Sub
下端のセルを選択しています。 D6 セルが選択状態になると思います。
Excel VBA のソースコード例:
Sub ExcelVBA_002467_左端のセルを選択()
Range("D4").End(xlToLeft).Select '「D4」セルを基準にして「左端」のセルを選択します。
End Sub
左端のセルを選択しています。 B4 セルが選択状態になると思います。
Excel VBA のソースコード例:
Sub ExcelVBA_002467_右端のセルを選択()
Range("D4").End(xlToRight).Select '「D4」セルを基準にして「右端」のセルを選択します。
End Sub
左端のセルを選択しています。 F4 セルが選択状態になると思います。
以下のマクロでは、上下左右の端のセルのアドレスと行番号、列番号を取得しています。 Debug.Print の出力の時に出力したい内容を , (カンマ)で区切っていますが、これは正式なやりかたではないかもしれません。出力してみると一定の幅(スペース)があいて出力されるので自分流で使用しています。
Excel VBA のソースコード例:
Sub ExcelVBA_002467_上下左右端セルのアドレスと行番号と列番号を取得() With Range("D4") 'Range("D4") を対象にして With ステートメントというものを使用しています。これ以降 Range("D4").end(xlup) と書くところを .end(xlup) と書けば良く、 Range("D4") の記述を省略できるようです。 '上端取得 Debug.Print "[ 上端セルの情報 ]" Debug.Print "Address", .End(xlUp).Address(False, False, xlA1) Debug.Print "Row", .End(xlUp).Row Debug.Print "Column", .End(xlUp).Column '下端取得 Debug.Print "[ 下端セルの情報 ]" Debug.Print "Address", .End(xlDown).Address(False, False, xlA1) Debug.Print "Row", .End(xlDown).Row Debug.Print "Column", .End(xlDown).Column '左端取得 Debug.Print "[ 左端セルの情報 ]" Debug.Print "Address", .End(xlToLeft).Address(False, False, xlA1) Debug.Print "Row", .End(xlToLeft).Row Debug.Print "Column", .End(xlToLeft).Column '右端取得 Debug.Print "[ 右端セルの情報 ]" Debug.Print "Address", .End(xlToRight).Address(False, False, xlA1) Debug.Print "Row", .End(xlToRight).Row Debug.Print "Column", .End(xlToRight).Column End With End Sub
上のマクロの実行結果は以下のようになりました。イミディエイトウィンドウへの出力結果です。上下左右端のセルの情報を取得して調べることが出来ました。
イミディエイトウィンドウへの出力結果:
[ 上端セルの情報 ]
Address D2
Row 2
Column 4
[ 下端セルの情報 ]
Address D6
Row 6
Column 4
[ 左端セルの情報 ]
Address B4
Row 4
Column 2
[ 右端セルの情報 ]
Address F4
Row 4
Column 6
テスト環境
- Windows 10
- Microsoft Office Excel 2003
あとがき
Excel VBA カテゴリの投稿は目的、題材、方法、テスト環境の大項目に分けて、マクロ名も統一感のあるものにして・・・とテンプレートのように投稿を書いていこうと思っていましたが、やはり自由な書式で書いていこうと思います。
以上、閲覧ありがとうございました。