• 締切済み

エクセル名簿の中で使用頻度の多い漢字はどの漢字?

エクセル2013、初心者です。「名簿表の中で使われている漢字一文字の使用頻度順にランキングで抽出したい。」その場合、任意の文字を指定してこの漢字は何位?ではなく、「1位、2位、3位・・・はどの漢字?という風にランキング表で抽出したい。」のです。一つのセルに英数字はなく、漢字だけが7文字から15文字程あり2000セル程ある表から、50文字(50位まで)程、抽出したいです。ご教示よろしくお願いします。

みんなの回答

  • kkkkkm
  • ベストアンサー率65% (1634/2479)
回答No.10

No.9の訂正です。 50位を5位としてました。 If i > 5 Then ↓ If i > 50 Then

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1634/2479)
回答No.9

No.7、No.8の追加です。 セルに抽出したデータを全て書き込むと時間がかかりそうなので With Sheets("Sheet2")以降を以下に変更してください。 With Sheets("Sheet2") LastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Range(.Cells(1, "A"), .Cells(LastRow, "B")).ClearContents Dim tmp As mList For i = UBound(mBuf) To 1 Step -1 For j = 1 To i - 1 If mBuf(j).mCnt < mBuf(j + 1).mCnt Then tmp = mBuf(j) mBuf(j) = mBuf(j + 1) mBuf(j + 1) = tmp End If Next j Next i For i = 1 To UBound(mBuf) If i > 5 Then Exit For End If .Cells(i, "A").Value = mBuf(i).mStr .Cells(i, "B").Value = mBuf(i).mCnt Next End With End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1634/2479)
回答No.8

No.7の一部訂正です。 一部ドットがなかったのと、結果が50個以下の場合、最終行のセルデータが削除されるのを訂正しました。 With Sheets("Sheet2") 以降に一部訂正があるのでWith Sheets("Sheet2")以降を以下に変更してください。 With Sheets("Sheet2") LastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Range(.Cells(1, "A"), .Cells(LastRow, "B")).ClearContents For i = 1 To UBound(mBuf) .Cells(i, "A").Value = mBuf(i).mStr .Cells(i, "B").Value = mBuf(i).mCnt Next LastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Sort.SortFields.Clear .Sort.SortFields.Add Key:=.Range(.Cells(1, "B"), .Cells(LastRow, "B")) _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal .Sort.SetRange .Range(.Cells(1, "A"), .Cells(LastRow, "B")) .Sort.Header = xlGuess .Sort.Apply If LastRow > 50 Then .Range(.Cells(51, "A"), .Cells(LastRow, "B")).ClearContents End If End With End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1634/2479)
回答No.7

VBAだとこれでいけるかも Sheet1の指定した範囲の漢字を、Sheet2のA列に漢字、B列に出現数を、出現数順に記載します。 必ず標準モジュールにコピペしてください。 Sheet1、Sheet2は実際のシート名に A1:U94は実際のセル範囲に変更してください。 Type mList mStr As String mCnt As Long End Type Sub Test() Dim mBuf() As mList Dim i As Long, j As Long, LastRow As Long Dim c As Range, mDic As Object Dim mChar As String Set mDic = CreateObject("Scripting.Dictionary") j = 0 For Each c In Sheets("Sheet1").Range("A1:U94") For i = 1 To Len(c.Value) mChar = Mid(c.Value, i, 1) If Not mDic.Exists(mChar) Then j = j + 1 ReDim Preserve mBuf(j) mDic.Add mChar, j mBuf(j).mStr = mChar mBuf(j).mCnt = 1 Else mBuf(mDic.Item(mChar)).mCnt = mBuf(mDic.Item(mChar)).mCnt + 1 End If Next Next With Sheets("Sheet2") LastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Range(.Cells(1, "A"), Cells(LastRow, "B")).ClearContents For i = 1 To UBound(mBuf) .Cells(i, "A").Value = mBuf(i).mStr .Cells(i, "B").Value = mBuf(i).mCnt Next LastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Sort.SortFields.Clear .Sort.SortFields.Add Key:=.Range(.Cells(1, "B"), .Cells(LastRow, "B")) _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal .Sort.SetRange .Range(.Cells(1, "A"), .Cells(LastRow, "B")) .Sort.Header = xlGuess .Sort.Apply .Range(.Cells(51, "A"), Cells(LastRow, "B")).ClearContents End With End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

#5です。中途になりました、すみません。 漢字ごとの頻度表は、#5の例で、 挿入ーピボットテーブルーピボットテーブルのフィールドで 行ーー>氏名漢字、Σ値ーー>データの個数・氏名漢字、にします。 C列に 氏名漢字 植 田 金 之 介 中 川 末 次 植 村 直 次 で ーーー 下記のような表ができます。 行ラベル データの個数 / 氏名漢字 金 1 介 1 次 2 植 2 川 1 村 1 中 1 直 1 田 1 之 1 末 1 (空白) 総計 13 元データ例は A1:A3 氏名 植田 金之介 中川 末次  植村 直次 でした。 並び順を思い通り(どうするか?)にするのが難しいと思う。 ーー 初歩的なVBAでも、文字ごとに分解するのは簡単に出来るのですが。 文字(漢字、その他文字でも)コードが、それに適したものとなっている、ようだ。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

・1名の氏名について、漢字以外はないものとする。でも最近は、カタカナの「ケンジ」などあるよね。どうする?漢字を使う、キラキラネームはどうする。 ・1漢字文字について、姓と名の中は区別しないものとする。 ・漢字かどうか判別がエクセルVBAでは難しい。 ・上村 XXが先にあって、上田 YY の行に来た時、漢字「上」の出現頻度の係数に+1する方式はやりたいが、難しい。Findメソッドで検索すればできるが。 ーー 例えば、簡単さ優先で、 1文字ずつC列に下行に並べる。 Sub test01() k = 1 For i = 1 To 2 ’2の行数を氏名数だけ増やす x = Cells(i, "A") For j = 1 To Len(x) If Mid(x, j, 1) = " " Then '全角空白は飛ばし、カウントしない。 Else Cells(k, "c") = Mid(x, j, 1) k = k + 1 End If Next j Next i End Sub (2)C列で、この後、データー重複の削除 操作で重複文字を削除で。、    出てくる文字の例がわかる。 (3)C列で、ソート (4)同じ字は、行的に、まとまるので、カウントプログラムを作り、統計表を作成。 (5)読みの順に漢字を並べるのは、フリガナが要るので、どうする? 時間がないので途中で略。漢字ごとの頻度表は機会があれば。 元々、本件は趣味的なニーズだよな。何に使うのかな?

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

クエリというのがあるのか。昔あったかな? それを使うのが良いね。 私がVBAで関数を作ったら、派遣従業員がそれはすでにエクセルにありますって指摘があったのを思いだした・・・。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

エクセルの達人ならVBAなしでできるのかもしれないな。私はできないので、やるならVBAを使う。 (1) セルの読み書き関数を最初に作る。 例 s = シート名.cells(y, x)だったっけ? (2) セルから文字列を読み込んだら、端の1文字から最後まで順番に読みながら、漢字リストシートと1文字1文字照合しながら文字をカウント・新規追加する。 t = mid(s, 2, 1)とか、こんなっぽいやつ。 (3) 最後に漢字リストシートをソート 処理をVBAステートメント1個1個まで分解すれば、その1個1個は簡単である。

全文を見る
すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8053/17219)
回答No.2

1)セル中の漢字を1文字づつに分ける。 2)その漢字の頻度分布を計測する。 という手順で行います。作業列を使えばワークシート関数でも可能ですが,VBAを使うのが簡単です。

全文を見る
すると、全ての回答が全文表示されます。
  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.1

名簿にテーブル書式を設定してクエリ(クエリ名「名簿」)を作成。 続いて新規クエリを作成して詳細エディタに下記を貼り付け let 文字列結合 = Text.Combine(名簿[氏名]), 文字列分割 = Text.ToList(文字列結合), テーブル変換 = Table.FromList(文字列分割, Splitter.SplitByNothing(), {"文字"}), 行のグループ化 = Table.Group(テーブル変換, {"文字"}, {"件数", each Table.RowCount(_)}), 行の並べ替え = Table.Sort(行のグループ化,{"件数", Order.Descending}), 行数を調整 = Table.FirstN(行の並べ替え,50) in 行数を調整 以上

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルで作成 混合名簿から男子のみの名簿作成方法?

    ご教示ください エクセルで混合名簿を作成しましたが、その原簿から男子のみ、特定教科成績の表を作成したい。つまり、原簿から数要素で抽出した表をつくる方法をお教えください。

  • Excelでデータの出現頻度を知りたい

    1~40の任意の数値が入っている表から出現頻度が高いものから順に上位7位までの数値と回数を知りたいのですが、Excelでどうやれば可能でしょうか?

  • Win7 フォントの並べ方について

    Win7 主としてEXCELを使っています。表の文字を統一するため、漢字(全角)は「HG丸ゴチM-PRO」と英数字(半角)は「Century」を使っています。 切り替え時にこの2つが「フォントを指定する場合」離れていてやり難いです。 フォントの順番はAlphabet順なのですが、これ以外に任意に並べることはできますか? こんな愚問、恐縮ですがご教示下さい。 尚、「見出し」に「丸ゴチ」を指定して、「本文」に「Century」をと、やってみたのですが、うまく行きませんでした。本文も「丸ゴチ」になってしまいました。 以前に、頻繁に使うフォントが上の方に集まってくれたことがあったようなことが記憶にあります。こういう風に行けばいいのですが。 よろしくお願い致します。

  • エクセルの中の漢字を一度にカナ変換したい

    教えて下さい。 エクセルでの表で漢字をカナに一度に変換したいのですがいい方法はありませんか? 漢字・カナが混じっている表なのですがデーターの並び替えで50音順にしたいのですが、漢字もカナに変換しておかなければカナと漢字と別々の50音順になってしまいます、カナも漢字も関係なく50音順にしたいので何かいい方法はないですか?

  • エクセルの名簿を名前順に並べ替えたい

    エクセルの名簿を名前順に並べ替えたいです。 Aのセルによみがな、Bのセルに漢字の名前が入っています。 例えば、 サカイ オサム   境 治 サカイ ジロウ   坂井 次郎 サカイ タカシ   酒井 隆史 サカイ タロウ   境 太郎 サカイ ハナコ   坂井 花子 サカイ ヨシコ   酒井 良子 とある場合、Aのセルで並べ替えるとBのセルの名字が揃いません。 これをよみがなでそろえ、さらに漢字でも並べ替えることはできるでしょうか。

  • エクセルで名簿の並び替えについて

    エクセルで名簿の一覧表を作成している時についての質問です・・・ 50音順に並び替えをしようと思いますが 濁点があるときに うまくできません。 例えば 「中岡(なかおか)」     ↓ 「中島(なかじま)」     ↓ 「長岡(ながおか)」     ↓ 「長嶋(ながしま)」 以上の4名を50音順に並べると 本当なら このような順になるはずです。 しかし エクセルで並べ替えを行うと 中岡→長岡→中島→長嶋の順になってしまいます。 50音で並べるときに 「なか」が先で「なが」が後に来るようにするにはどうすればよいのでしょうか?

  • エクセルで名簿の照らし合わせの仕方を教えてください

    エクセルで作ってある 名簿の照らし合わせをやっているのですが じつは手作業なのです。 Aの表に載っている人が Bの表にも載っているという場合 の見つけ方を教えてください よろしくお願いします Aの表はイベント参加不適格者で1200人程があり Bの表はイベント参加申込者で16000人程です 参加不適格者が参加申し込みをしていた場合チケットを送らずに 今回は参加を見合わせてもらう趣旨の電話連絡をするための洗い出し 作業になります 表は右セルから番号/名前/住所/電話番号 の順で入っています 1200回の検索はきついです いっぺんにやる方法は無いでしょうか 困っています よろしくお願いします

  • エクセルで名簿を作りたいのですが

    エクセル全くの初心者です、名簿を作りたいのですがうまく行かないので質問させて頂きます。 回覧板を回す名簿を作りたいと思っています、一行ずつあけて縦に15人の名前を入れ横方向に日付の欄を4つつけたいと思っています。 (4回まわした日付を入れる) 田中 良  11-1111 田中太郎  11-1112    上のような感じで左側の一マスの中に名前と電話番号(6桁 例11-1111)を入れたいです。名前が三文字の人は姓名の間を一マスあけてやってみたのですが3文字の人と4文字の人で電話番号の先頭がそろいません。セルを結合して中央ぞろえでもうまくいかないのですが回覧板の前の名簿は同じ形式の名簿でもちゃんとそろっているのですがどうやったらいいでしょうか?

  • エクセルの名簿作成で

    エクセルを使って名簿を作成しているところです。もともと、パソコンは、独学で身につけたので基本もあまりわかっていません。 名簿を作るため、表を作ったのですが、一番上に名簿のタイトルを入れようとすると、タイトルが長すぎるため(?)おさまりきらずわくからはみだしてしまいます。 エクセルは、横にABCD・・・とアルファベットが並んでいますよね。そのうちの1つのアルファベットのますにしかタイトルを書き込めないのでたとえばタイトル5文字くらいしか書けません。 説明が難しくて意味がわかるかどうか不安ですが、どなたかこの説明でわかる方、長いタイトルを入れる方法を教えていただけませんか?

  • エクセル管理の名簿から必要な名簿だけを抽出したいんですが

    windowsXPとエクセル2002を使ってますが、エクセルで管理している名簿(住所録)から、共通のキーワードを使ってまとめて検索・抽出する、良い方法はありませんか? 例えば宛名が「パン工場」「チーズ工場」「ジャム工場」のようにある場合、キーワードを「工場」というくくりだけでデータを抽出したいのです。 因みに「フィルターオプションの設定」だと、同一セルの中に他の語彙や文字が入っていると、除外されてしまいます。 例)キーワード「すし」⇒「すし屋」×(抽出されず)、といったような感じです。「Ctrl+F」ですと一つ一つ拾わないといけないので、大容量のデータですと、全て見つけ出すのに大変な労力と時間が掛かってしまいます。上記以外で何か良い方法はないでしょうか?よろしくお願いいたします。

専門家に質問してみよう