- ベストアンサー
Excel VBA フィルタオプションで結果のデータを取り込む方法
- Excel VBAでフィルタオプションを使用して結果を表示する際に、抽出されたデータだけを取り込む方法について教えてください。
- フィルタオプションで抽出されたデータに対して処理を行いたい場合、一般的にフィルタを解除しないと選択できないセルデータを取得してしまいます。そのため、フィルタオプションで抽出されたデータのみを取り込む方法が知りたいです。
- 具体的な例として、タイトル行として1行目があり、2行目からのデータをフィルタオプションで抽出した場合、フィルタされたデータのみを取り込む方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
sub macro1() dim r as long dim h as range ’一個も抽出されなかった場合に注意 r = range("A65536").end(xlup).row if r = 1 then msgbox "no match data" exit sub end if ’可視セルを取得する for each h in range("A2:A" & r).specialcells(xlcelltypevisible) msgbox h.address next end sub などのように。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
基本的には、「フィルタ」は条件に合わないセル行を非表示にするもので、データは、シートに残っている。そうでなければ困る場合が多い。 (1)可視セルをとらえるコードにする (2)別セル範囲に結果を出す(フィルタオプションの設定で) 同じシートの別セル範囲に結果を出せば良いようです。 これはフィルターフィルタオプションの設定の仕組みを使ってます。 フィルタの▼クリックで現れる「オプション」ではない。 ーー マクロの記録を採って多少付け加えただけのもの。 Sub Macro4() Range("A1:A7").Select Range("A1:A7").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "E1:E2"), CopyToRange:=Range("H1:H8"), Unique:=False d = Range("H100").End(xlUp).Row MsgBox d For i = 2 To d MsgBox Cells(i, "H") Next i End Sub ("H100").は適当に実情にあわせて。 ーー 別シートに結果を出したい場合は、その別シートを開いて、操作を始め、データ範囲や条件セル範囲は別シートのセル範囲指定になります(します)。 抽出範囲を別シート指定の形式にすると、不可になるでしょう。 見出し 見出し 見出し 1 >=3 3 2 4 3 5 4 6 5 6 この場合は行番号は「飛んで表示されない」ことからも判りますが、シートの行を非表示にするものではない。