- ベストアンサー
Excelでフィルターのかかっているときの最終行の取り方。
Dim mySh As Worksheet Set mySh = Sheet("Sheet1") Debug.Print mySh.Cells(mySh.Rows.Count,1).End(xlup).Row でデータのあるA列の最終行を取得していますが、この場合、フィルターがかかっていると実際のデータのある最終行でなくて見えている部分の最終行が返ってきます。 Excel2003 SP3 WindowsXP SP3 フィルターがかかっていても実際のデータのある最終行を取得する方法あるのでしょうか?
- みんなの回答 (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
その他の回答 (1)
- OtenkiAme
- ベストアンサー率77% (69/89)
こんにちは。 > フィルターがかかっていても実際のデータのある最終行を取得する方法 データ範囲そのものの行数を取得するか 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から取得した レコードが表示されていますが、タイトル行より上の 行も値があるとカウントされてしまいますので 先の方法はちょっと、怖いです。 上の行数を固定すればいけるかもしれません。 下の方は、何度も書いたり消したりしていると一番 最大の行(削除していても)を取得するようでちょっと だめかもしれません。
お礼
ありがとうございます。 正しい値が返ってきました。 参考にさせていただきたいと思います。 ≦(._.)≧