みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのマクロ

現在エクセルにてデーターの分析などをおこなっています。
そこで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件コピーできる方法はないでしょうか?

投稿日時 - 2007-07-13 13:26:41

QNo.3163871

すぐに回答ほしいです

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

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

投稿日時 - 2007-07-14 23:53:18

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

 
>ベスト10のデーターをコピーできないでしょうか?
>どんな条件でオートフィルターをかけても10件コピーできる方法はないでしょうか?

(1)ベスト10をコピーしたい
(2)必ず10件コピーしたい

これ、おかしくないですか?

1000
900
800
700
600
500
400
300
200
200
200
200
200
200
100

こんな場合だってあるのだから。
普通に考えると、(2)は勘違いだと思うが、
質問者の意図が分からないのでそこらの補足が必要。
 

投稿日時 - 2007-07-15 08:42:58

ANo.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を使うと簡単です。

それから結果ソートは、データシートへコピーした後、そこでソートしてもいいような。。。
以上です。
 

投稿日時 - 2007-07-14 10:17:01

ANo.1

補足要求です。

ソートはしないのでしょうか?

投稿日時 - 2007-07-13 13:43:05

補足

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

投稿日時 - 2007-07-14 09:07:32

あなたにオススメの質問