• ベストアンサー

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 フィルターがかかっていても実際のデータのある最終行を取得する方法あるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.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

tss_jp
質問者

お礼

ありがとうございます。 正しい値が返ってきました。 参考にさせていただきたいと思います。 ≦(._.)≧

その他の回答 (1)

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.1

こんにちは。 > フィルターがかかっていても実際のデータのある最終行を取得する方法 データ範囲そのものの行数を取得するか 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)

tss_jp
質問者

補足

>はエラーになりませんか?(Sheets) なります。 10行目がタイトル行でそれ以降にAccessから取得した レコードが表示されていますが、タイトル行より上の 行も値があるとカウントされてしまいますので 先の方法はちょっと、怖いです。 上の行数を固定すればいけるかもしれません。 下の方は、何度も書いたり消したりしていると一番 最大の行(削除していても)を取得するようでちょっと だめかもしれません。

関連するQ&A