アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelのオートフィルタを使うと列単位でトップ10を表示させる事が可能ですが、これと同じような感じで、行列範囲でトップ10を表示させる方法はありませんでしょうか?
※行列範囲にある文字を1列に整理すれば済む話なのですが、データ数が非常に多い&行によって列幅が異なるため、出来れば行列範囲でトップ10を表示させたいです。

A 回答 (3件)

VBAでやってみました。


データの範囲をA1~H10 
ランキングを表示するのがJ1以下~
それぞれの個数をK1以下に表示するものとします。

Sub TEST01()
Dim myDic As Object
Dim arOut As Variant
Dim c As Range, Rng As Range
Dim i As Long
Set myDic = CreateObject("Scripting.Dictionary")
With ActiveSheet
Set Rng = .Range("A1:H10")
For Each c In Rng
If Not myDic.exists(c.Value) Then
myDic.Add c.Value, Application.CountIf(Rng, c.Value)
End If
Next
arOut = myDic.Keys
.Range("J1").Resize(myDic.Count).Value = WorksheetFunction.Transpose(arOut)
For i = 1 To myDic.Count
.Cells(i, "K").Value = myDic.Item(Cells(i, "J").Value)
Next i
.Range(.Range("J1:K1"), .Range("J1:K1").End(xlDown)).Sort Key1:=Range("K1"), Order1:=xlDescending, Header:=xlNo
End With
Set myDic = Nothing
Set Rng = Nothing
End Sub
    • good
    • 0
この回答へのお礼

意図した動作をしました!!
VBAは多少理解しているつもりでいましたが、こんな簡単なプログラムで出来るとは思いませんでした。本当にどうもありがとうございます。

お礼日時:2008/07/08 15:18

トップ10が大きい順か小さい順かわからないが、


G1:G10にA1:E10の範囲の大きい順のトップ10を表示する場合。
G1:=LARGE($A$1:$E$10,ROW())
これをG2:G10の範囲にコピー。
H1:H10にA1:E10の範囲の小さい順のトップ10を表示する場合。
H1:=SMALL($A$1:$E$10,ROW())
これをH2:H10の範囲にコピー。
    • good
    • 0
この回答へのお礼

ご回答頂きどうもありがとうございます。

質問の仕方が間違っていた事に気付きました、すみません・・・。オートフィルタで出来るトップテンは恐らく数字の大小なのですね。

私が行いたいトップテンというのは文字であり、行列範囲に書かれた文字のうち、数の多い文字のトップテンを表示させたいと考えています。
※イメージとしては以下のような感じです。
東京 大阪 札幌 東京 大阪 東京 仙台 東京
大阪 東京 東京 福岡 札幌 東京 東京 大阪
東京 札幌 東京 大阪 大阪 東京 大阪 東京
・・・
⇒1位=東京、2位=大阪、3位=札幌、・・・

始めはCOUNTIFを使おうかとも思ったのですが、項目数が非常に多いため断念しました。無理なようでしたらVBAで作る事にしますが、もしExcelの機能だけで出来るようでしたら教えて頂けませんでしょうか?

お礼日時:2008/07/08 07:36

出来ないものはあきらめること。

エクセルの標準的な入力方式に反した使い方をしておいて、仕様が無い。
(1)エクセルの操作(フィルタのような備わった機能)では該当のない
(2)関数などでは単純に簡単には出来ない ランクー>並べ替え?
(3)VBAならできるでしょう。
1行分だけなら
作業行を確保しそこにコピーし、ソートし、左から10個取り出せばどうですか。マクロの記録だけで大筋のところはコードがわかると思う。
>表示させる方法はありませんでしょうか
「表示」ってどうするの?実例を書いて説明しないと。ここでも注文によっては手間取るよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!