質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

8628閲覧

VBAで最終行の取得方法(オートフィルタで絞り込みしている場合)

yutkts

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2019/03/01 11:30

VBAでオートフィルタが有効になっていた場合でも、
最終行の値を取得する方法をご教授いただきたいです。

<標準のデータ表示>

AB
1AAA
2BBB
3CCC

上記のようにデータ表示されている場合、以下の処理にて
エクセルシートの最終行(3行目)を取得できるかと思います。

VBA

1Range("A", & Rows.Count).End(xlUp)

今回ご質問させて頂いた内容としては、
オートフィルタでA列の絞り込みを行い、以下の状態で表示されたとします。

AB
2BBB

この場合でもデータの最終行として3行目を取得したい場合、
どのように実行すればよろしいでしょうか。

処理の前にオートフィルタを無効にする方法も検討しましたが、
オートフィルタを無効化にした後、再度同じ条件で絞り込み処理を行う方法がわからず
ご質問させていただきました。

何卒、よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そもそも、「表の最終行番号」が分かったとして、
その値をどのように使うつもりですか?

例えば、

VBA

1Sub test() 2 MsgBox Range("A1").CurrentRegion.Address 3End Sub

このように、
Range("A1").CurrentRegion(A1セルを含むアクティブな表の意)とすれば、
表示・非表示の状態にとらわれず、表の範囲を取得できますので、
取り立てて最終行番号だけを、取得する必要性があまりありません。
どうしても行番号をという事であれば、

VBA

1Sub test2() 2 Dim Rng As Range 3 4 Set Rng = Range("A1").CurrentRegion 5 MsgBox Rng.Rows(Rng.Rows.Count).row 6End Sub

このようにして、表のセル範囲という情報の中から取り出します。

また、
「すでにオートフィルターが掛かっている。」
ということが前提条件で、「オートフィルターが掛かっているセル範囲」を
知りたいならば、

VBA

1Sub test3() 2 MsgBox ActiveSheet.AutoFilter.Range.Address 3End Sub

このようにして、知ることも可能です。
(オートフィルターが掛かっていなければエラーになるので、
合わせて、エラーの回避処理を書いておいた方がよいでしょう)

あ、質問を読み直したら、「行番号」とは一つも書いてないですね。
失礼しました。

まず、セル範囲を取得します。
で、そのセル範囲の行数を数えます。(例 Range("B3:D5").Rows.Count)
その行数は、表の上から数えたら、最終行は、「数えた行数」番目になります。
ので、Rowsプロパティーの引数に数えた数を指定してやれば、「最終行」を指し示すことになります。
Range(”B3:D5").Rows(Range("B3:D5").Rows.Count)

投稿2019/03/01 12:16

編集2019/03/01 12:25
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutkts

2019/03/06 09:52

お世話になります。 返答遅くなり申し訳ありません。 今回実施したかった内容として オートフィルタで非表示になっている行があったとしても A列の値をすべて取得したいといった内容でした。。 オートフィルタにて設定されていない場合は、 以下でA列の値がすべて取得できるかと思います。 ```vba Set r = Range("A1", Range("A" & Rows.Count).End(xlUp)) ``` ただオートフィルタにて非表示とした場合 End(xlUp)のヒットする行が表示行のみとなるため これをなんとかしたいという内容でした。 そもそもの質問内容が誤っており申し訳ありません。 ※一応質問時は、開始行から最終行までの値を取得するために  最終行を取得したかったという意図もありました
mattuwan

2019/03/06 11:07

で、紹介したコードで、セル範囲が特定できませんでしたか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問