• ベストアンサー

エクセルのマクロ

現在エクセルにてデーターの分析などをおこなっています。 そこで1つ質問ですがオートフィルターをした後のベスト10のデーターをコピーできないでしょうか? Sheets("シート名").Select Range("J5").Select Selection.AutoFilter Field:=10, Criteria1:=">=500", Operator:=xlAnd Range("A5:R2384").Sort Key1:=Range("Q5"), Order1:=xlDescending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal ActiveWindow.SmallScroll ToRight:=-4 Range("B5:R15").Select Application.CutCopyMode = False Selection.Copy Sheets("データーシート3").Select Range("B5").Select ActiveSheet.Paste この様にやっているのですが Criteria1:=">=500"の部分が変動する為に、表示されるデーター数がバラバラです。 たえずどんな条件でオートフィルターをかけても10件コピーできる方法はないでしょうか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

オートフィルタを使わなくてもできるのではないか。 トリガをボタンクリックにして Sheet1(元データ)をSheet2(結果シート)へコピー 「オートフィルタを問題にしている列」でソート 「オートフィルタを問題にしている列」で抜き出し該当分を抜き出して、書き出し。その場合、Sheet2の上行(例第2行)から順次上書きしても可のはず。 トップ10なら、書き出しが10を越えれば打ち切り。 Sheet2で、抜き出して上書き済み行次行以下をクリア ーー 会社名=Aで且つ計数>500なら、ソートキーとして、会社名+計数でソートすればよいと思う。 元の順序を保存したければ、Sheet2にコピーしてきたとき、各行に連番を振り、上記処理終了後、連番でソートすればよい

その他の回答 (3)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

  >ベスト10のデーターをコピーできないでしょうか? >どんな条件でオートフィルターをかけても10件コピーできる方法はないでしょうか? (1)ベスト10をコピーしたい (2)必ず10件コピーしたい これ、おかしくないですか? 1000 900 800 700 600 500 400 300 200 200 200 200 200 200 100 こんな場合だってあるのだから。 普通に考えると、(2)は勘違いだと思うが、 質問者の意図が分からないのでそこらの補足が必要。  

回答No.2

こんにちは。 以下のようにすればいいのでは? (1)”>=500”でフィルター (2)その結果に、続けて、トップテンのフィルター (3)その結果にソートが必要なら(質問ではソートしている)ソート (4)その結果を全て、データシート3へCOPY 実際のブックをコピーしてそれで以下をお試しください。 フィルターをかけるシートをアクティブにしておく Sheet3 が結果をコピーするシート 下記コードを標準モジュールにコピペして実行 '-------------------------------------------------------- Sub test()  Range("J5").Select  Selection.AutoFilter Field:=10, Criteria1:=">=500", Operator:=xlAnd  Selection.AutoFilter Field:=10, Criteria1:="10", Operator:=xlTop10Items  Range("A5").CurrentRegion.Sort _     Key1:=Range("Q5"), Order1:=xlDescending, _     Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _     Orientation:=xlTopToBottom, SortMethod:=xlPinYin  Range("A5").CurrentRegion.Copy Sheets("Sheet3").Range("A5") End Sub '-------------------------------------------------------- 結果範囲を特定には、CurrentRegionを使うと簡単です。 それから結果ソートは、データシートへコピーした後、そこでソートしてもいいような。。。 以上です。  

  • pamsd
  • ベストアンサー率18% (39/209)
回答No.1

補足要求です。 ソートはしないのでしょうか?

yossy0426
質問者

補足

pamsdさん ソートは事前におこなっています。

関連するQ&A

専門家に質問してみよう