• 締切済み

Excelで文字列から頻出Top5を抽出するには?

A1セルからA500セルまでの列に現れた頻出ワード(文字列)のTop5をB1セルからB5セルへ抽出するには、どのような記載をすれば良いでしょうか?頻出ワードの回数はわからず、B1セルからB5セルまで、頻出ワード順に記載する方法を教えてください。よろしくお願い申し上げます。Excelは2019となります。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.9

#8で画像を上げ損ねたのでポストします。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.8

VBAを持ち込んでよければ以下のようなコードでいかがでしょうか。 なお、 C列にヒットした数を表示しない場合は  SQL = SQL & "select Top 5 F1" & vbCrLf C列にヒットした数を表示する場合は  SQL = SQL & "select Top 5 F1,c" & vbCrLf として下さい。 また、第5順位が同数で並ぶ場合は、それぞれを表示しています。 つまり、事例の場合は、出力結果は6行となります。 Option Explicit Sub sampleX()    Dim SQL As String  Dim cn As Object  Dim rs As Object  'SQL用環境設定  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=No;IMEX=1"  cn.Open ThisWorkbook.Path & "\" & ThisWorkbook.Name   'SQL文組み立て  SQL = ""  SQL = SQL & "select Top 5 F1" & vbCrLf  '注  SQL = SQL & "From(" & vbCrLf  SQL = SQL & "SELECT F1 ,count(F1) as c" & vbCrLf  SQL = SQL & "FROM [Sheet1$A1:A50000]" & vbCrLf  SQL = SQL & "group by F1" & vbCrLf  SQL = SQL & ") as t" & vbCrLf  SQL = SQL & "order by c DESC" & vbCrLf    'SQL全文を実行  rs.Open SQL, cn  '結果セットを出力  With ThisWorkbook.Sheets("Sheet1")   .Cells(1, 2).CopyFromRecordset rs  End With    '後処理  rs.Close      '結果セットクローズ  cn.Close      'データベースをクローズ  Set rs = Nothing  'オブジェクトを破棄  Set cn = Nothing End Sub

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.7

 別シートに作業列を設けて処理する方法です。  今仮に >A1セルからA500セルまで という元データーが入力されているセルが存在しているシートがSheet1であるものとし、Sheet2のA列を作業列をとして使用するものとします。  まず、Sheet2のA1セルに次の関数を入力して下さい。 =IF(Sheet1!$A1="","",IF(COUNTIF(Sheet1!$A$1:A1,Sheet1!$A1)=1,COUNTA(Sheet1!$A:$A)*COUNTIF(Sheet1!$A:$A,Sheet1!$A1)-ROW(),""))  次に、Sheet2のA1セルをコピーしてSheet2のA2~A500の範囲に貼り付けて下さい。  次に、Sheet1のB1セルに次の関数を入力して下さい。 =IF(COUNT(Sheet2!$A:$A)<ROWS(B$1:B1),"",INDEX($A:$A,MATCH(LARGE(Sheet2!$A:$A,ROWS(B$1:B1)),Sheet2!$A:$A,0)))  次に、Sheet1のB1セルをコピーしてSheet1のB2~B5の範囲に貼り付けて下さい。  以上です。

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

作業列を使うので、お気に召さないかも。 取り急ぎやったので、不十分点はあるかも。 ーー 例データ A1:A20 第1行は見出し必須 語句 bb cc aa bb aa bb cc aa aa cc bb dd ff gg dd ee dd gg hh == データーーフィルター詳細設定で重複する「レコードは無視する」で E列に(第1行は見出し必須) 語句 bb cc aa dd ff gg ee hh 重複を除いた語句の1セットが出る。 ーー F2に=COUNTIF($A$1:$A$20,E2)*100+ROW(A1) この式を下方向に複写 結果 頻度 401 302 403 304 105 206 107 108 ーー H2に =LARGE($F$1:$F$9,ROW(A1)) 結果 H列 頻出順 403 401 304 302 206 108 107 頻出順になる。 ーー I列 =INDEX($E$2:$E$20,MATCH(H2,F$2:F$20,0)) 下方向に式複写 結果 H,I列 頻出順 語句 403 aa 401 bb 304 dd 302 cc 206 gg 108 hh 107 ee 語句そのものを明示。 このうち好きな上位数の語句を使う。403の先頭桁の4が出現数です。 ーー エクセルでなくデータベース言語SQLなどなら、一度に出そう。

  • NuboChan
  • ベストアンサー率47% (745/1582)
回答No.5

回答No.4に関して追加です。 >Excelは2019となります。 であれば、以下に差し替えてください。 '重複なしのデータをB列に抽出_2  Dim lRow As Long  lRow = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row  Worksheets("Sheet1").Range("B1:B" & lRow).Value = Worksheets("Sheet1").Range("A1:A" & lRow).Value  Worksheets("Sheet1").Range("B1:B" & lRow).RemoveDuplicates Columns:=1, Header:=xlNo

  • NuboChan
  • ベストアンサー率47% (745/1582)
回答No.4

初心者のVBAですが、参考にどうぞ。 TOP5ではなく、頻出ワード(文字列)毎の抽出と件数をソートした結果です。 Office365以降の関数を一部利用しているので旧EXCELでは変更が必要です。 Option Explicit Sub Sample() Dim cnt As Long Dim rg As Range Dim varData As Variant Dim Ans As Variant Dim i As Long, lc As Long '重複なしのデータをB列に抽出 With Worksheets("Sheet1") varData = .Range("A1", .Range("A" & Rows.Count).End(xlUp)).Value End With Ans = WorksheetFunction.Unique(varData) Worksheets("Sheet1").Range("b1").Resize(UBound(Ans), 1).Value = Ans lc = Cells(Rows.Count, 2).End(xlUp).Row '指定範囲の件数カウント For Each rg In Range("A1:A500") For i = 1 To lc cnt = WorksheetFunction.CountIf(Range("A1:A500"), Cells(i, "B")) Cells(i, "C") = cnt Next Next 'ソート Range("B1:C" & lc).Sort _ Key1:=Range("C1"), Order1:=xlDescending, Header:=xlNo End Sub

  • f272
  • ベストアンサー率46% (8003/17107)
回答No.3

そういうことを一つの関数でやろうとすると、他の人にはよくわからない関数になってしまいます。作業列を作って順番に考えてください。 B1=1 B2=IF(B2=B1,B1+1,1)としてB500までコピーする C1=LARGE(B1:B500,1) C2=LARGE(B1:B500,2) C3=LARGE(B1:B500,3) C4=LARGE(B1:B500,4) C5=LARGE(B1:B500,5) として頻出ワードの回数を抽出する D1=INDEX(A1:A500,MATCH(C1,B1:B500,0),1) D2=INDEX(A1:A500,MATCH(C2,B1:B500,0),1) D3=INDEX(A1:A500,MATCH(C3,B1:B500,0),1) D4=INDEX(A1:A500,MATCH(C4,B1:B500,0),1) D5=INDEX(A1:A500,MATCH(C5,B1:B500,0),1) で頻出ワードを抽出する ただし頻出ワードの回数が同じものがあれば、もう少し考える必要がある。

  • SI299792
  • ベストアンサー率48% (713/1472)
回答No.2

B1: =INDEX(A:A,MATCH(LARGE(C:C,ROW()),C:C,0)) B5迄コピペ。 C1: =IF(COUNTIF(A$1:A1,A1)=1,COUNTIF(A:A,A1)-ROW()/1000) C500迄コピペ。(ワークエリアです。目障りなら非表示にして下さい。)

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.1

添付図参照(Excel 2019)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄↓↓↓↓↓↓↓↓↓↓↓↓↓

関連するQ&A

  • エクセルで、異なる文字列を抽出するには。

    エクセルで、A1からA10に文字列のデータがあるとします。 10個のセルのデータは「あああ」が4こ「いいい」が3こ「ううう」が2こ「えええ」が1こ順不同であった場合、B1に「あああ」B2に「いいい」B3に「ううう」B4に「えええ」と異なる文字列のみ1個ずつ抽出するにはどうすればいいでしょうか。

  • エクセル2000で文字列から数値を抽出したい。

    エクセル2000で文字列から数値を抽出したい。 ワークシートのA列に下記の文字列が入力されています。 A1セル="123456 日本男子 54,321 7,654,321 12,345" A2セル="234567 東京都子 1,234 2,345 5,321" A3セル="345678 大阪太郎 99 689 9,876" データ間はスペースで区切られています。 後方2番目の数値をB列に取出す方法を教えて下さい。 B1セル=7,654,321 B2セル=2,345 B3セル=689 よろしくお願い致します。

  • エクセルで文字列の抽出方法についてお尋ねします。

    宜しくお願いします。 エクセルを使用して条件付の文字列の抽出をしたいと思っています。 A列のセルに2つの文字列がスペースを挟んで50行ほど入っています。 また、その中にはひとつの文字列しか入っていないものもあります。 イメージ的には以下のようなものです。 | A | B ------------------------------------- 1|エクセル マウス| -------------------------------------- 2|エクセル ペン | -------------------------------------- 3|エクセル ノート | ------------------------------------- 4|エクセル    | ------------------------------------- 上記の例では「エクセル」という文字はひとつのセルですが コレが多くあります。 ここで、2つの文字列の組み合わせだけをB列に表示させることは 出来ますか? また、このパターンが終わった後に、「エクセル」という文字列の代わりに 「ワード」という文字列のものが51行目から続きます。 ここでも2つの文字列の組み合わせと「ワード」単体のものとが あるので、出来れば2つの文字列の組み合わせだけをB列に表示し なおかつ上の方へ詰めて表示したいのです。 分かりづらい質問で申し訳ありません。 宜しくお願いします。

  • Excelの文字数が決まっていない文字列の抽出

    教えてください。Excelで、文字数の決まっていない文字列を抽出したいのですが、例えば、 セルA1 : プロジェクト1 簡単な文章 2352 PD_JOK セルA2 : プロジェクト13 複雑な文章列とは決まっていない 2453 AO_JKI ・・・・・・ というセルから、 プロジェクト名から、半角数字前までの文字数が決まっていない文字列「簡単な文章」や「複雑な文章~」をセルB列に抽出する方法を教えていただきたいのですが、 そして、半角数字後の半角英字「PD_JOK」をセルC列に抽出する方法も同時に教えてください。 万単位でデータがあるので、関数を使わないと難しいです。 よろしくお願い致します。

  • エクセルの文字列の抽出方法について

    ★★エクセルの文字列の抽出方法について★★ 下記の「対象セルの内容」のような感じで1つのセルの中に複数行の文字列が入っているのですが、 下から3行とか4行とかを指定して文字列を抽出したいと考えています。 ■対象セルの内容 [改行] [改行] [改行] a/b/r1.php[改行] a/b/r2.php[改行] a/b/r3.php[改行] a/b/r4.php ■抽出したい値 a/b/r2.php[改行] a/b/r3.php[改行] a/b/r4.php 何かしらうまい方法はないでしょうか。 ご教授なにとぞよろしくお願いいたします。

  • エクセル 文字列から数字だけを抽出

    エクセル2016の操作について教えて下さい。 セル内の文字列から数字だけを抽出したいです。 例えばAの列にこのような文字列が入っているとします。 高度5km 高度10.1km この中の数字だけを取り出して隣のB列の同じ行に数字だけを表示させる方法がありましたら教えて下さい。 宜しくお願いします。

  • Excel 文字列の抽出

    Excel初心者です。 1つのセルに以下のデータが入力されています。 A:文字列B:文字列C:文字列D:文字列 このセルの「C:」から「D:」の間にある文字列を 他のセルに抽出する方法を教えてください。 宜しくお願いいたします。

  • EXCELで、文字列の中から数字を抽出したいのですが。

    お世話になります。 EXCELにおいて、A1のセルに文字と数字が入力されています。この中から、最初の数字のみを、B1に抽出したのですが、ご教示お願いします。 文字の長さと数字の位置は、様々な文字列です。 宜しくお願い致します。

  • エクセルで文字列の最大値を抽出する方法

    文字列の最大値を抽出したいのですが 4つのセルにA、B、C、Dが入力されている場合の文字列の最大値Dを抽出する関数式を知りたい エクセルヘルプで見るとMAXAとなっていたのですが抽出する答えは”0”となってしまいます。

  • Excelで複数の文字列を抽出する方法

    Excel 2007で列に、[xxxA],[xxxB],[xxxC]... といった文字列があります。 例えば、この文字列の右端が、[A]か[B]で終わる文字列のみを抽出する方法をご教授ください。 一つの文字列であれば、RIGHT関数で抽出できたのですが、2つ以上の抽出方法が判りません。 どうぞよろしくお願いいたします。

専門家に質問してみよう