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は、

f:id:akashi_keirin:20180714211807j:plain

こんな感じ。

で、イミディエイトに

?sheet3.LastRowNumber(1)
?sheet3.LastRowNumber(3)
?sheet3.LastRowNumber(4)

と打ち込んで、それぞれ[Enter]してみる。

それぞれ、7115が返るはず。

f:id:akashi_keirin:20180714211816j:plain

ほれ。この通り。

おわりに

シートのPropertyにしてしまうことで、コードの可読性が上がるかも知れない。