- ベストアンサー
文字列の最頻値を求める方法について
- MODE関数という数値の最頻値を求めるエクセルの関数がありますが、文字列の最頻値を求める関数は存在しないようです。
- しかし、文字列の最頻値を求める方法としては、プログラミング言語を利用する方法があります。
- 具体的には、出身地のデータをリスト化し、各要素の出現回数を数えることで、最頻値を求めることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
(データ)A1:D10の場合 出身県の一番多いものの名 No 氏名 出身 性別 1 山田 茨城 男性 2 山本 東京 女性 3 内田 埼玉 女性 4 鈴木 埼玉 男性 5 佐藤 千葉 男性 6 近藤 埼玉 男性 7 佐倉 茨城 男性 8 山藤 茨城 男性 9 鈴木 埼玉 男性 上記以外のデータのないセルに =INDEX($C$2:$C$10,MIN(IF(MAX(COUNTIF($C$2:$C$10,C2:C10))=COUNTIF($C$2:$C$10,C2:C10),ROW(C2:C10)-1,"")),0) と入れてSHIFT+CTRL+ENTER(3つを同時に押す) 配列数式です。先頭と後尾にそれぞれ{ }がつく。 頻度の最多数と等しいCOUNTIFの県の行の最小の行の 県名を取り出していることになる。 (結果)埼玉 配列数式としても複雑になっているケースなので、本番データの多いデータで十分チェックして見て下さい。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ユーザー定義関数を作ってみました。 '最頻出データを返す Public Function modea(r As Range) Dim objList, x, maxCount, maxKey Set objList = CreateObject("Scripting.Dictionary") For Each x In r If Not objList.Exists(x.Value) Then '新しいオブジェクト objList.Add x.Value, 1 Else '重複出現時カウント+1 objList.Item(x.Value) = objList.Item(x.Value) + 1 End If Next maxCount = 0: maxKey = "" For Each x In objList.Keys If objList.Item(x) > maxCount Then maxCount = objList.Item(x) maxKey = x End If Next modea = maxKey End Function ALT+F11で標準モジュールそ挿入し貼り付け ワークシートの適当なセルで =modea(C2:C6) みたいな感じで使います
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 出身がC2:C100にあるとします。 =INDEX(C2:C100,MATCH(MAX(INDEX(COUNTIF(C2:C100,C2:C100),)),INDEX(COUNTIF(C2:C100,C2:C100),),0)) で、一番多い出身地名を表示します。 なお、一番多い出身地が複数ある場合は、より上の行に登場する方を優先して表示します。(MODEと同じ) あと、途中に出身が空欄のデータがあると、正しい結果にならないかも知れません。 出身が都道府県名ならば、どこかにあらかじめ一覧表を作成しておき、COUNTIFでカウントした方が簡単だと思います。