• ベストアンサー

オートフィルタをしても本当の最終行を取得したい

エクセル2007のVBAについて教えてください。 A1→目次 A2→あ A3→い A4→う A5→え A6→お オートフィルタで「え」を抽出します。 この状態で Sub test() MsgBox Range("a65536").End(xlUp).Row End Sub を実行すると、5が返ってきますが 実際の最終行は6です。 オートフィルタをしつつ、最終行を取得するには どうすればいいのでしょうか? ご回答よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.5

>オートフィルタをしつつ、最終行を取得するには with activesheet.autofilter.range msgbox .cells(.cells.count).row end with などで。

t6y7u5r4
質問者

お礼

この方法は初めて知りました! ありがとうございました。

その他の回答 (4)

回答No.4

No.2です。訂正です。 (誤) For i = 30 to 1 Step -1 (正) For i = 65536 to 1 Step -1 失礼いたしました。

t6y7u5r4
質問者

お礼

どうして30なのかなーと思いましたがw ありがとうございました。

  • f_onion
  • ベストアンサー率47% (10/21)
回答No.3

たとえばこんなのはどうでしょう Sub test2() Dim r As Range Set r = Range("A:A").SpecialCells(xlCellTypeConstants) 'MsgBox r.Cells(r.Count, 1).Value ' お と出る。 MsgBox r.Cells(r.Count, 1).Row Set r = Nothing End Sub UsedRangeを利用する方法でもいけるかもしれません。 ない場合は IsEmpty(r) か r Is Nothing で判定できると思います(ためしてません。見つからなくてエラーになるかも)

t6y7u5r4
質問者

お礼

エラーにならずにうまくできました ありがとうございました。

回答No.2

こちらでいかがですか? Sub test() Dim i, myColumn As Integer myColumn = 1 For i = 30 To 1 Step -1 If Trim(Cells(i, myColumn)) <> "" Then MsgBox i: Exit Sub Next End Sub iやmyColumnは別のアルファベットに変えていただいて大丈夫です。 Trim()で、セルに半角または全角スペースだけが入力されている場合は、それを空白セルとみなすようにしています。 スペースだけが入力されたセルも最終行とみなしたい場合は、Trim()を外してください。 もっとスマートな手法があると思うのですけど、ご参考になれば幸いです。

t6y7u5r4
質問者

お礼

これでもできるのですね。 有難うございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

A列の行で空の行が無い場合には次のようにすればよいでしょう。 MsgBox WorksheetFunction.CountA(Range("A:A"))

t6y7u5r4
質問者

お礼

なるほど!関数を使うのですね! ありがとうございました。

関連するQ&A

専門家に質問してみよう