プロが教えるわが家の防犯対策術!

Dim mySh As Worksheet


Set mySh = Sheet("Sheet1")

Debug.Print mySh.Cells(mySh.Rows.Count,1).End(xlup).Row

でデータのあるA列の最終行を取得していますが、この場合、フィルターがかかっていると実際のデータのある最終行でなくて見えている部分の最終行が返ってきます。

Excel2003 SP3
WindowsXP SP3

フィルターがかかっていても実際のデータのある最終行を取得する方法あるのでしょうか?

A 回答 (2件)

A列とフィルタ範囲が別の場合も考慮してみました。



Dim mySh As Worksheet
Dim c As Range
Dim cRow As Long
Dim Row1 As Long
Dim Row2 As Long

Set mySh = Sheets("Sheet1")
Row1 = mySh.Cells(mySh.Rows.Count, 1).End(xlUp).Row
If ActiveSheet.AutoFilterMode Then
Row2 = mySh.AutoFilter.Range(mySh.AutoFilter.Range.Count).Row
End If
For Each c In mySh.Range(mySh.Cells(Row1, 1), mySh.Cells(Row2, 1))
If c <> "" Then cRow = c.Row
Next
MsgBox cRow
    • good
    • 2
この回答へのお礼

ありがとうございます。

正しい値が返ってきました。
参考にさせていただきたいと思います。

≦(._.)≧

お礼日時:2010/01/24 23:18

こんにちは。



> フィルターがかかっていても実際のデータのある最終行を取得する方法

データ範囲そのものの行数を取得するか
Dim mySh As Worksheet
Set mySh = Worksheets("Sheet1")
Debug.Print mySh.Range("A1").CurrentRegion.Rows.Count
Set mySh = Nothing

オートフィルタのかかっているデータ範囲の行数を取得されては如何でしょうか。
Dim mySh As Worksheet
Set mySh = Worksheets("Sheet1")
If mySh.AutoFilterMode Then
Debug.Print mySh.AutoFilter.Range.Rows.Count
End If
Set mySh = Nothing

ところで、
Set mySh = Sheet("Sheet1")
はエラーになりませんか?(Sheets)

この回答への補足

>はエラーになりませんか?(Sheets)
なります。

10行目がタイトル行でそれ以降にAccessから取得した
レコードが表示されていますが、タイトル行より上の
行も値があるとカウントされてしまいますので
先の方法はちょっと、怖いです。

上の行数を固定すればいけるかもしれません。


下の方は、何度も書いたり消したりしていると一番
最大の行(削除していても)を取得するようでちょっと
だめかもしれません。

補足日時:2010/01/24 23:11
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A