• ベストアンサー

エクセル トップテン機能

エクセルトップテン機能で、「上位10を抽出ではなく」 「上位5位から10位を抽出」する方法はありますか? VBAでもいいので教えてください。 よろしくお願い致します。

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

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

「上位」の場合の作成例: sub macro1()  dim target as range  activesheet.autofiltermode = false  set target = range("A1:A" & range("A65536").end(xlup).row)  target.autofilter field:=1, criteria1:=">=" & application.large(target, 10), operator:=xland, criteria2:="<=" & application.large(target, 5) end sub

yhyji
質問者

お礼

ありがとうございました。

その他の回答 (2)

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

まず操作だが 例データ A列 計数 12 34 56 32 45 21 82 23 61 45 37 ーー どこか使わないセルに 今D2,D3と仮定する D2に =LARGE(A2:A12,5) D3に =LARGE(A2:A12,10) と入れる ’--- 条件部のセル F2セルに ="<=" & LARGE(A1:A12,5) G2セルに =">=" & LARGE(A2:A12,10) トするとD2,D3セルは要らない ーーー 条件部 F1:G2に 計数 計数 F2の式 ="<="&D2 G2の式 =">=" & D3 (注)またはD2,D3を使わない前記の式を入れる ーーー データーフィルターフィルタオプションの設定の操作をすると 結果 計数 34 32 45 21 23 45 37 ーー 同値の順番などはLarge関数の既定の性格で規定される。それガ気に食わない場合はこの方法は使えない。 ーー そのままVBAにも出来る。マクロの記録を多少修正。 F1:G1に「計数」、I1に計数を入れて実行。 Sub Macro4() x = WorksheetFunction.Large(Range("A1:A12"), 5) MsgBox x y = WorksheetFunction.Large(Range("A1:A12"), 10) MsgBox y Range("F2") = "<=" & x Range("G2") = ">=" & y Range("A1:A12").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "F1:G2"), CopyToRange:=Range("I1:I12"), Unique:=False End Sub ーーー VBAだと、他にも色々なロジックが考えられるだろう。

yhyji
質問者

お礼

ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

B1セルに選択抽出とでも入力します。 B2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(AND(RANK(A2,A:A)>=5,RANK(A2,A:A)<=10),1,"")) その後に「並べ替えとフィルタ」から「フィルタ」を選択しB列で1の付いたものを抽出するようにすればよいでしょう。

yhyji
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう