人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルで単語がたくさんあるシートがあるとします(同じ単語が重複することがある)
このシート内のの単語の頻出ランキングを作りたいと考えているのですが、

1行1列から総当たりでカウントしていくと。。。。ランキングにできません(-"-)

シート2などに、一旦出現する単語リスト(重複しない)なるものを作ればランキングを作ることはできるんですが。。。シート2.( )=シート1の総当たり then カウント++ みたいな感じで。
でもその単語リスト(重複しない)を作るのがたいへんなんです。

伝わったでしょうか??どのようにしたらいいでしょうか?? よろしくお願いします(+_+)

●質問者: 555525
●カテゴリ:コンピュータ
✍キーワード:エクセル カウント ランキング リスト 単語
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● 勇者よっしー
●15ポイント

データ→集計

で駄目なんでしょうか?

一度別シートにコピーして

データ→集計

で、個数でソートしてコピーして

別シートを消して

ペースト

という感じで。

◎質問者からの返答

集計をもう少し詳しく教えてください^^


2 ● hiko4karasu
●15ポイント

データ>フィルタ>フォルダオプションの設定

重複するレコードは無視するとして、同じ単語を表示しないようにします。

countifで単語を数えて、単語数でソートするれば、出来上がり。

これでどうでしょう?

◎質問者からの返答

たとえば10行10列で単語が入ってるとき1列にまとめないとだめですか??

重複するレコードを無視して一旦何種類の単語が出るかを把握して

countif をその回数分するということでしょうか??


行、列のことなるいろんなエクセルのシートがあり、それぞれ、ボタンひとつでランキングのカウントができるとうれしいのですが。。。


3 ● doxas
●50ポイント ベストアンサー

動的配列をうまく活用すれば、できるとは思いますが……どうでしょう。

質問者さんの書かれている内容だけを見ると、いまいち状況がわかりませんが、憶測で書いてみました。


Option Explicit

Type RankingData 'ランキング用構造体
 Items As String 'ランキングのアイテム
 Values As Long 'アイテムの個数
End Type

Sub test()

 Dim V As Variant 'セル範囲のデータ取得用
 Dim R As Variant 'ForEachNext 用カウンタ
 Dim L As Long '汎用データ用
 Dim C As Long '汎用カウンタ
 Dim Ranking() As RankingData
 
 V = Worksheets("Sheet1").UsedRange '使用されているセル範囲を取得
 ReDim Ranking(0)
 Ranking(0).Items = V(1, 1)
 
 For Each R In V
 L = UBound(Ranking)
 For C = 0 To L
 If R = Ranking(C).Items Then '既出アイテムかどうかチェック
 Ranking(C).Values = Ranking(C).Values + 1
 Exit For
 Else
 If C = L Then
 ReDim Preserve Ranking(L + 1)
 Ranking(L + 1).Items = R
 Ranking(L + 1).Values = 1
 Exit For
 End If
 End If
 Next
 Next
 L = UBound(Ranking)
 With Worksheets("Sheet2") 'Sheet2 に集計した情報を吐き出す
 For C = 0 To L
 .Cells(C + 1, 1).Value = Ranking(C).Items
 .Cells(C + 1, 2).Value = Ranking(C).Values
 Next
 .Columns("A:B").Select '結果をソート(降順)
 Selection.Sort Key1:=.Range("B1"), Order1:=xlDescending
 .Range("A1").Select
 End With
 
End Sub

これでレコード数を順次更新しながらカウントはできます。

上記のコードですと、ひとつめのシート(Sheet1)にデータがあり、ふたつめのシート(Sheet2)に結果が出力されます。

◎質問者からの返答

.Columns("A:B").Select '結果をソート(降順)

Selection.Sort Key1:=.Range("B1"), Order1:=xlDescending

.Range("A1").Select

のところでエラーが起きちゃったんで、とりあえず消してみて実行したら

私の欲しい結果が返った来ました。(ソートされてない状態)ありがとうございます。

これを見て少し勉強したいと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ