[[20080812102739]] 『オートフィルタで抽出された各行をマクロで選択』(うめ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オートフィルタで抽出された各行をマクロで選択』(うめ)

 いつも教えて頂いてありがとうございます。
 前文検索をしてみたのですが、「オートフィルタ」は多くて。。。
 見つかりませんでした。重複してたらごめんなさい。

 今日は、オートフィルタで抽出された各行をマクロで選択する方法を
 教えて頂きたいのです。

 例えば、1行目(A1)に設定されている項目のフィルタで、「2」を選択したら、
 5,6,10行目だけが表示されました。そのときに

 まず、A5を選択したい。(次にA6 → A10・・・終わりまでループ?)

 range("A1").select
 ActiveCell.Offset(Rowoffset:=1).select
 としても、A5ではなく、非表示になっているA2が選択されてしまいます。

 マクロの記録などで、→キーなどでセル移動しても、選択されたセルの
 絶対値A2などが帰ってきてしまい、うまくいきません。。。

 どうぞ、宜しくお願い致します。m(_ _)m


 近くの掲示の 『オートフィルタで集計後にVBAマクロでデータを取得したい』(kokit) 

 このマクロが参考になりませんか。(夏雲)

  
[[20080808234849]]『オートフィルタで集計後にVBAマクロでデータを取得したい』(kokit)

 選択したセルが非表示だった場合の処理を帰れば良かったのですね!失礼しました。

 似ている項目だと思ってみてはいたのですが、
 抽出下部分の全体コピーペーストとか、非表示部分の削除だったりしたので、
 ちょっと違うと思ってしまいました。

 ありがとうございました。

 ところで、HiddenやNextを利用する以外に『見えているセルだけの順次選択』できる、
 簡単な記述法はないのでしょうか。。。(今後の参考に)

 (うめ)


 Sub test()
  ' オートフィルタがかかっている状態で実行。
  ' イミディエイトウインドウに表示されているA2以下のアドレスを表示します。

   Dim r As Range, rr As Range, rs As Range
   Set r = Range("A2", Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)

   For Each rr In r
       For Each rs In rr.Areas
           Debug.Print rs.Address
       Next
   Next
 End Sub
 あとはどうしたいのか不明なのでパス。
 (じゅんじゅん)

 >順次選択』できる

 やりたいことが何なのか? よくわかりません。
  どこかに選択した行だけ転記したい? ということでしょうか。(夏雲)

 A列を順次選択ならFindメソッドでもいいのでは?
 オートフィルタかける必要ないし。(見えるのが嫌ならしょうがないですけど)
 (じゅんじゅん)

 抽出した値の、B列「○○」→C列に「XX」と記述、B列が「▲▲」ならC列に「▽▽」と記述し、
 別シートにその行を順番に転記したかったのです。
 じゅんじゅんさんの For Each rs In rr.Areas で作業したら、うまくできました。

 きっと、フィルタオプションとかを使ってもできそうに思うのですが。。。
 (後学のためにも、抽出された部分のみの順次選択の記述が知りたかったのです)

 で、Areasは表示されている部分だけを拾うんでしょうか?それとも、"r"のセットに
 SpecialCells(xlCellTypeVisible)が入っているからなのでしょうか?

 夏雲さんのご指摘どおり、『オートフィルタで集計後にVBAマクロでデータを
 取得したい』で出ていた記述でも、最終的に同じことができますよね。
 勉強になりました。

 ありがとうございました。

 (うめ)

 >で、Areasは表示されている部分だけを拾うんでしょうか?それとも、"r"のセットに
 >SpecialCells(xlCellTypeVisible)が入っているからなのでしょうか?
 表示されているA列が仮に、A3,A5,A6,A7,A10とした場合、
 1回目の
 For Each rr In r
 では、A3,A5:A7,A10が抽出できます。

 更に2回目の
 For Each rs In rr.Areas
 でA3とA10はいいですが、A5:A7を分解する必要がありますのでAreasを使ってます。
 結果、A3,A5,A6,A7,A10が抽出できます。
 (じゅんじゅん)

 なるほど、抽出結果の中で連続しているA5〜A7のような部分を分解するために
 For Each の中にFor Eachが使われていたのですね!
 初心者にも分かりやすい説明、ありがとうございました!
 (うめ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.