• ベストアンサー

エクセルのマクロ

現在エクセルにてデーターの分析などをおこなっています。 そこで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/17068)
回答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

  • Excelでマクロを繰り返したい。

    Excelでマクロを記録したら以下のようになりました このマクロを以下の条件で繰り返したいのですが。 Sub Macro1() '------------- '----------------------- ' Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=5*", Operator:=xlAnd, _ Criteria2:="<>5@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=6*", Operator:=xlAnd, _ Criteria2:="<>6@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=7*", Operator:=xlAnd, _ Criteria2:="<>7@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=8*", Operator:=xlAnd, _ Criteria2:="<>8@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 条件= Field:は4~35位まで変動します 一連の動作をコピーして手作業で数字を変えてみたのですが プロージャが大きすぎてエラーになってしまいます。 何か良い方法は無いでしょうか?。

  • エクセルマクロの件

    AとBにあるデータの一覧をCにコピーして、全体を日付順にソートするという処理をしたいと思っています。 そこでエクセルマクロにて (1) Aのデータの必要部分をコピー、Cに貼り付け (2) Bのデータの必要部分をコピー、Cに貼り付け (3) 全体を日付順にソート というものができました。 ただ、Bのデータを貼り付ける位置で問題が発生しています。 仮に、Aに200行までのデータが入っている場合、Bのデータを201行目に張り付けすれば問題ありませんが、Aのデータが増えたときにはAのデータの201行目以降はBのデータで上書きされてしまいます。 そこで、Bのデータを上記の例だと250行目あたりに張り付けするようにマクロを変えると、なぜかBのデータは一切Cに反映されなくなってしまいます。 この理由と、上記の対策があれば教えていただければと思います。 ちなみに、現在設定されているマクロは以下の通りです。 自動記録にてつくってあるので無駄な部分もあるかと思いますが、よろしければご覧いただければと思います。 Sheets("Aのシート").Select ActiveWindow.SmallScroll Down:=-138  Range("A4:O200").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=-162  Range("A4").Select ActiveSheet.Paste Application.CutCopyMode = False  Sheets("Bのシート").Select Range("G25:G28").Select Range("G28").Activate ActiveWindow.SmallScroll Down:=-30 Range("A4:O120").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=147 Range("A181").Select ActiveSheet.Paste Cells.Select Range("A4:O200").Select Selection.Sort Key1:=Range("C4"), Order1:=xlAscending, Key2:=Range("D4") _ , Order2:=xlAscending, Key3:=Range("E4"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal End Sub

  • ボタンを押して実行するマクロの編集について

    キャンプの班分けで、いったん班分けという全員の名簿のワークシートから班毎に別々のワークシートに名簿を作成するというマクロです。 ボタンを押して実行します。 班の数が例年18班だったのが、20班に増えてしまいました。 そこでマクロをコピーして数字を変えて19班、20班の分も作りたいと考えています。   19班を作ったのですが、うまくいかず、教えていただければ助かります! Sub Macro1_19() ' ' Macro1_10 Macro ' マクロ記録日 : 2007/7/1 ユーザー名 : kkk' ' Sheets("班分け").Select Selection.AutoFilter Field:=2, Criteria1:="19" Range("C6:Q187").Select ActiveWindow.ScrollRow = 23 ActiveWindow.ScrollRow = 1 Selection.Copy Sheets("19班").Select Range("C8").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Selection.Sort Key1:=Range("G8"), Order1:=xlDescending, Key2:=Range("I8") _ , Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _ xlSortNormal, DataOption2:=xlSortNormal Sheets("班分け").Select Selection.AutoFilter Field:=2 Sheets("19班").Select End Sub

  • エクセルマクロVBAについて

    エクセルマクロVBAについて、こんなこと出来ますか? ■A列からAS列の1行目にヘッダー情報をもつデータベース ■A列に担当者名 ■A列にオートフィルタをかけて各担当ごとにデータを抽出したものを別シートに貼り付けて自動印刷したい ■担当者は都度変わるので、Criteria1:="xxx"というようには直接書けない(担当名を自動で抽出したい) ■担当者の数も都度変わる ■補足 一行のデータを特定の雛形に転記する必要があるので別シートに出したいです ちなみに、アナログで記録したコードは以下です。 Sub test1() Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="山田" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="斉藤" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="田中" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub これ、担当者の抽出を自動でなんとかなりませんか?

  • 下記のマクロの説明(意味)を教えてくださ。

    Range("A4").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A5"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlStroke, DataOption1:=xlSortNormal

  • Excelのマクロ 検索範囲を広げたい

    マクロ初心者です。 マクロが入ってるExcelファイルがあるのですが、 マクロボタンを押しても結果がでないので、たぶんマクロの検索範囲が1列しかなってないみたいなので広げたいのですが、どうしたらよいでしょうか? Sub 検索準備() ' ' 検索準備 Macro ' ' Sheets("データ表").Select Range("A3:ES2002").Select Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Sheets("検索表").Select Range("A4").Select ActiveCell.FormulaR1C1 = "=+R[1]C" Range("A4").Select Selection.Copy Range("B4:ES4").Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Sheets("個人スキル").Select Range("D3:E3").Select End Sub Sub スキル検索() ' ' スキル検索 Macro ' ' ' Sheets("検索表").Select Range("A4:ES4").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1:ES4").Select Application.CutCopyMode = False Selection.Copy Sheets("計算表").Select ActiveWindow.SmallScroll ToRight:=-3 Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Range("F1:J149").Select Application.CutCopyMode = False Selection.Copy Range("L1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SmallScroll ToRight:=4 Range("L13:P149").Select Application.CutCopyMode = False Selection.Sort Key1:=Range("L13"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("L23").Select Sheets("個人スキル").Select Range("D3:E3").Select End Sub 検索準備ボタンと、スキル検索2種類ボタンがあります。 どこをいじくればよいのか分かりません。 検索表の検索範囲が表題を抜かして人の名前などが入ってる列が1列しかなってないので・・・

  • 記述を簡略化させたい

    お世話になります。 下記の記述をスマートにさせたいのですが、ご教示お願いします。         記 Sub 優先順位() Range("A16:Y25").Select Selection.Sort Key1:=Range("Y16"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A43:Y52").Select Selection.Sort Key1:=Range("Y43"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A70:Y79").Select Selection.Sort Key1:=Range("Y70"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A97:Y106").Select Selection.Sort Key1:=Range("Y97"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A16").Select End Sub

  • エクセルマクロ 抽出したデータを別のシートへコピーしたい

    マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 【1】シート名「データ」をA列でオートフィルタ抽出して、別シートにコピーする。 【2】別シートにコピーしたデータに外枠罫線をつける。 【3】シート名「データ」には塗りつぶしがあるので、別シートにコピーされた塗りつぶしは「なし」する。 【4】シート名「Sheet1」の1~2行目をコピーし、別シートの1~2行目に挿入し、シート名「データ」に戻る。 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、今はコピーして「あ行」の部分を書き換えています。(かなり面倒です) 最終的には、抽出されたそれぞれのシートを別々のブックにしたいとも思っています。 長々とすみませんが、どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 Sheets("データ").Select Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="あ行", Operator:=xlAnd Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy Sheets("あ行").Select Range("A1").Select ActiveSheet.Paste Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With Cells.Select Selection.Interior.ColorIndex = xlNone Sheets("Sheet1").Select Rows("1:2").Select Selection.Copy Sheets("あ行").Activate Rows("1:1").Select Selection.Insert Shift:=xlDown Range("A1").Select Sheets("データ").Select Range("A1").Select

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • オートフィルタのマクロが動作しない

    Excelで縦に日付がランダムで並んでいる列(C列)があり、その列を日付の新しい順から降順で並ぶよう、オートフィルタ→(空白以外のセル)→降順とやると出来るのですが、その一連の動作をマクロでやろうとすると「実行時エラー'1004'; この操作には、同じサイズの結合セルが必要です。」と出てマクロが作動しません。 デバッグでみると Selection.AutoFilter Field:=3, Criteria1:="<>" Range("A1:EA231").Sort Key1:=Range("C1"), Order1:=xlDescending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub と出ていて、2行目のRange~から4行目の~Normalまで下地が黄色くなっています。 コードがあまり詳しくないもので…どなたか解決法の解るかた、お教えいただけますでしょうか。よろしくお願いいたします。