自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/ExcelVBA/JavaScript/Raspberry Piなどで色んなことを自動化

シートの最終行番号を取得するユーザー定義関数 - VBA(エクセルマクロ)

最近仕事で受注・発注業務のオートメーション化をするにあたって、VBAで良く使う「シート内で利用している最終行番号を取得する」「特定のセルを基準に一番下のセルの行番号を取得する」ユーザー定義関数をメモとして残しておきます。

シート名を引数にユーザー定義関数を記述

Function maxRow(ByVal sheetName As String) As Integer 
    maxRow = Sheets(sheetName).UsedRange.Rows.Count
End Function

これで関数の定義はできました。

シートの名前を指定して関数を呼び出す

    Debug.Print maxRow("sheet1") 

定義した関数を呼び出すにはmaxRow()のカッコ内に最終行番号を取得したいシート名を入れる。

使用例

下記のようなワークシートで先程の関数を呼び出すと「5」が返されます。

f:id:maru0014:20170203220506p:plain

最終行まで間が空いていてもカウントされる

下記のような場合、6~8行目まで空白になっていますが9行目にデータが入力されているので戻り値は「9」となります。

f:id:maru0014:20170203221937p:plain

特定のセルを基準に一番下のセルの行番号を取得したい場合

先程のユーザー定義関数で最終行を取得する場合は行の途中で空白があっても飛び越えて一番下の行を取得します。 しかし、下記のようにA列の最終行番号を取得したいといった場合には別の方法を使いましょう。

f:id:maru0014:20170203222529p:plain

  今度はmaxRowCellという名前の関数を作ってみました。 シート名を指定した後ろが.range(rangeName).End(xlDown).Rowに変わっています。 こう記述すると指定したセルの列における最終行番号を返します。

Function maxRowCell(ByVal sheetName As String, ByVal rangeName As String) As Integer
    maxRowCell = Sheets(sheetName).range(rangeName).End(xlDown).Row
End Function

シートの名前とセル名を指定して関数を呼び出す

    Debug.Print maxRowCell("sheet1", "A1")

このように呼び出すとイミディエイトウィンドウには「5」と表示されます。

概ねこれらの2パターンで最終行の取得は可能なので、for文の繰り返し回数の指定などに応用すればかなり使い勝手のいい関数かと思います。

ついでなので、For文での繰り返し処理のやり方も書いておきます。

最終行まで繰り返し処理を行うFor文の書き方

下記のようなシートがあったとして、A列のアルファベットに応じてB列に1から順番に数字を入力していきたい場合。

f:id:maru0014:20170203224228p:plain

まずはA列の最終行番号を取得してB列の何行目まで入力すれば良いのかを計算します。

A列の最終行番号を取得したいのでmaxRowCellを使うことにします。

    For i = 1 To maxRowCell("sheet1", "A1")
        range("B" & i).Value = i
    Next

こんな感じですね。 For文の「i」は繰り返すごとに1づつカウントアップされていくのでrange("B" & i)と記述すれば繰り返すごとに B1→B2→B3 となっていくわけです。 そしてそのセルの中身に今回は数字を入れるだけなのでvalue = iで 1→2→3 と入力されていきます。

実行結果

f:id:maru0014:20170203225706p:plain

無事にB列に1~5の数字が入りましたね。

このようにシートや列の最終行番号を取得することでいろいろな繰り返し処理の変数へ当てはめることができるので、自動でデータの入力や数式の入力を行うマクロを作る際にはとても重宝しています。 ただ、もしこれよりも良い書き方などがあればコメントなどで教えてもらえると助かります。

 

↓これで勉強してます

たった1秒で仕事が片づく Excel自動化の教科書

たった1秒で仕事が片づく Excel自動化の教科書