目標:
変数には、特定のシートの行数が含まれている必要があります。
問題:
シートの行数を数えるには、Excel VBA のどの構文コードが必要ですか?
usedrange メソッドの使用は私のお気に入りの 1 つですが、注意して扱う必要があります。いくつかの欠陥/落とし穴があります。Excel が使用範囲をうまく追跡できないことは、既知の問題です。VBA を介して使用範囲を参照すると、値が現在使用されている範囲にリセットされます。したがって、使用範囲を取得しているときに、このサブプロシージャを実行してみてください。
Dim lRowCount as Long
Application.ActiveSheet.UsedRange
lRowCount = Worksheets("MySheet").UsedRange.Rows.Count
ただし、これにより使用範囲のカウントが得られることに注意してください。したがって、ワークブックの上部に空白行がある場合 (フィルター基準などのためにスペースを空けるためによく行われます)、それらはカウントされません。usedrange メソッドは、フォーマットによっても影響を受ける可能性があります。
最後の行を使用したい場合は、より信頼性の高い find メソッドを使用できます。
Dim rLastCell As Range
Dim lLastRow As Long
Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
If Not rLastCell Is Nothing Then lLastRow = rLastCell.Row
データを含むセルが少なくとも 1 つあることがわかっている場合は、上記を次のように単純化できます。
Dim lLastRow As Long
lLastRow = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
あなたも試すことができます:
i = Sheets("SheetName").UsedRange.Rows.Count
ただし、行の削除とクリアを開始すると、少しバグが発生する可能性があります。
これを行うより良い方法は次のとおりです。
i = Cells(Sheets("SheetName").Rows.Count, 1).End(xlup).Row
これは、各行の列 1 にデータがあることを前提としています。