SheetモジュールにPropertyを設置する(Excel)
ワークシートにPropertyを新設する
Propertyプロシージャを使う
Property
プロシージャというと、クラスモジュールで使うという印象だが(私だけ?)、標準モジュールだろうが、フォームモジュールだろうが、シートモジュールだろうが、何ならThisWorkbook
モジュールにも置くことができる。
列の最終行を返すProperty
シートモジュールに、引数で指定した列の最終行を返すProperty
を設定してみた。
今回は、Sheet3
オブジェクトのシートモジュールにProperty
を新設する。あ、Sheet3
ってのに深い意味はありません。実験用のブックのSheet3
が今回の実験に都合が良かったというだけ。
リスト1 Sheet3モジュール
Public Property Get LastRowNumber( _ Optional ByVal columnNumber As Long = 1) As Long '……(1)' LastRowNumber = getLastRowNumber(columnNumber) '……(2)' End Property Private Function getLastRowNumber( _ Optional ByVal columnNumber As Long = 1) As Long Dim lastRow As Long lastRow = Me.Cells(Rows.Count, columnNumber).End(xlUp).Row getLastRowNumber = lastRow End Function
カンタンなコードなので、特に説明はいらないと思うが、一応。
(1)の
Public Property Get LastRowNumber( _ Optional ByVal columnNumber As Long = 1) As Long
は、引数と返り値の設定。
Property Get
というのは、Function
みたいなものなので、引数も指定できる。
ここでは、最終行を求める列の番号を引数としている。省略可にしており、省略されたときは「1」すなわちA列を指定することにした。
後は、(2)の
LastRowNumber = getLastRowNumber(columnNumber)
でFunction
を呼んで、返り値を返すだけ。
今回はメンドクサイので、最終行を求めるのに一番カンタンなEnd
プロパティを用いた方式を採用した。
当然、このやり方だとフィルター抽出されているようなときに意図しない結果になる。
気に入らなければFunction
の中身を変えたら良い。
実験
Sheet3
は、
こんな感じ。
で、イミディエイトに
?sheet3.LastRowNumber(1) ?sheet3.LastRowNumber(3) ?sheet3.LastRowNumber(4)
と打ち込んで、それぞれ[Enter]してみる。
それぞれ、7
、1
、15
が返るはず。
ほれ。この通り。
おわりに
シートのProperty
にしてしまうことで、コードの可読性が上がるかも知れない。