• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フィルター後、可視セル一部データ参照 VBA)

フィルター後、可視セル一部データ参照 VBA

このQ&Aのポイント
  • Excel2003を使用しております。フィルターを掛けたあと、範囲を別シートにコピーするプログラムを組みましたが、一部分だけ持っておきたい場合、どのようにすれば良いか分からない。現在は全範囲選択してコピーしているが、やりたいことと違うため解決策を探している。
  • テスト2の内容だけをコピーしてSheet2のA1に貼り付けることができるか分からない。現在はAとBを範囲指定してコピーし、テスト3も範囲指定してコピーしている。
  • 可視セルの指定行(A2:?)の一部の可視セルを取り出したい。良いサイトや方法があれば教えてほしい。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

ご質問の内容が解釈しきれませんでしたので、以下の回答でヒントになるかわかりませんが。 No1でのURL内「サンプル 1」の説明になります。 >これのFilterRowが・・・…? 以下の箇所がご不明かとおもいます。 For Each FilterRow In Worksheets("Sheet1").Range("A1"). _ CurrentRegion.Resize(, 1).SpecialCells(xlVisible) (1)Worksheets("Sheet1").Range("A1").CurrentRegion  Sheet1のA1セルのアクティブセル領域  (A1セルを選択後Ctrl+*(テンキー)をした範囲)  →A1:B10 (2)Resize(, 1)  (1)で対象とする範囲の行数をそのままに、列数を1に変更  →A1:A10 (3)SpecialCells(xlVisible)  xlVisibleはSpecialCellsのヘルプファイルでいうとこのxlCellTypeVisibleであり、すべての可視セルになります。  AutoFilterでフィルターが適用されていますので可視セルの範囲が取得されます  →A1、A3、A6、A7 For Eachで上記(3)で取得されたセルの数だけFilterRow(Rangeオブジェクトの変数)にセットしながら ループしますので、4周します。 FilterRow.Rowの 1週目Range("A1").Rowと同様であり、1が返ります 2週目Range("A3").Rowと同様であり、3が返ります 3週目Range("A6").Rowと同様であり、6が返ります 4週目Range("A7").Rowと同様であり、7が返ります この返り値が1以外(1は1行目のタイトル行なので除外している)の場合に MsgBox FilterRow.Row でフィルターで可視化された行番号を表示しています。

satoron666
質問者

お礼

回答ありがとうございました。 希望通りのものを出すことができました!(Exit For でループ抜けて) ただ、自分の中でやりたいことがごちゃごちゃになっているため、 考え直し、もう一度質問をあげたいと思います。 ありがとうございました^^

satoron666
質問者

補足

回答頂きありがとうございます。 プログラムの内容は理解しておりました。 フィルター後、見かけ上D列上から3番目?を 取得できないかと考えておりました。 その場合はOffsetでしょうか…? 1週目Range("A1").Rowと同様であり、1が返ります これで終了させたいので、 If文にして Exit for で 終了させれば良いのでしょうか?

その他の回答 (2)

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

>全範囲選択してコピー…ということはやりたいことと違う そうすれば今フィルタされて見えてる範囲だけを抜き出してコピーできますが、それで一体何が問題なのかな? 少なくとも「可視セルを選んでコピー」とかは、まったく必要ありません。 今そもそも「何がしたい」のか、「言葉の説明」とか「サンプルマクロ」とかが全然ちぐはぐなんですが、想像すると… >たとえば、フィルター後の内容が  : >とあったとして、テスト2の内容だけをコピーし >Sheet2のA1にコピーする sub macro1()  range("A:D").autofilter field:=どこかの列, criteria1:=何かの条件  range("C2:C" & range("C65536").end(xlup).row).copy destination:=worksheets("Sheet2").range("A1") end sub のように「全体をコピー」すればご希望の通りになります。 騙されたと思って、まず一回実際にあなたのエクセルでやってみてください。

satoron666
質問者

お礼

回答ありがとうございました。 やりたいことを考え直し、 もう一度質問をあげたいと思います。

satoron666
質問者

補足

回答ありがとうございます。 色々と説明不足で申し訳ありません。 可視セルの、Cの上から3行目のみを抜き出したいのです。 フィルタされている可視セルのみをコピーする方法は 今の所出来ているのですが…

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

http://support.microsoft.com/kb/401692/ja が参考になりませんか。

satoron666
質問者

お礼

回答ありがとうございます。 んー、この場合ですと、Forで全行のリストを出してしまうので もう少し良い方法がないかな?と思ってしまいます。 For Each FilterRow In Worksheets("Sheet1").Range("A1"). _ CurrentRegion.Resize(, 1).SpecialCells(xlVisible) If FilterRow.Row <> 1 Then RowCount = RowCount + 1 End If Next FilterRow MsgBox RowCount End Sub これのFilterRowが・・・…? とりあえず、FilterRowをMsgboxで出力してみましたが 何だか良く分かりませんでした。 Forの内部でExit For 抜けようとしましたが…

関連するQ&A