• ベストアンサー

エクセルでセルに入力された複数語をそれぞれ集計したい

へんな日本語ですみません。 例えばある列に 1りんご ばなな 2りんご みかん  などと入力されています。 この場合、データの集計を実行すると  りんご ばなな 1  りんご みかん 1  という結果になりますが、  りんご 2  ばなな 1  みかん 1  という結果が得られるような方法はないでしょうか。よろしくご教示ください。

質問者が選んだベストアンサー

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

●問題のパターン分けに付いて (1)1セルに語句が1つ(「りんご」だけや「バナナ」だけ)が入っていいる。 多分質問はこのケースでない。 =COUNTIF(A1:A6,"りんご")でカウントできる。 (2)1セルの中に2個所以上ある(重複あり) 多分質問はこのケース。 例 りんご なし りんご (3)結合語もあり(例 焼きりんご りんごジュース) 質問ではなにも言ってない。 多分別物と捉えるのでしょう。 (4)語句の区分 スペースとかで区切られているのか。 続いた文章のなかに現れるのか。 質問ではスペースで区切られているよう。 (5)「柿」と「かき」りんごと林檎のような表現の違いはないか。 ●本質問では(2)、(4)から データ 区切り位置 既設定の「カンマやタブ・・・を選ぶ。 (空白につられて、「スペースによって・・・」を選ばないこと。半角スペースでないので。) 「次へ」をクリック 「その他」をクリック 「その他」の右のボックスに全角1スペースを入れる 「次へ」をクリック 「完了」をクリック で語句ごとに列が分かれる。 そこで=COUNTIF(A1:C7,"りんご")を空きのセルにいれると 4となります。 (例データ) A1に りんご みかん りんご A2に なし バナナ A3に バナナ キウイ A4に りんご かき A5に みかん A6に イチゴ りんご A7に もも これが(列挿入の余分なことがあるが)一番判りやすいと思う。 (注意)当初B、C・・列に別のデータがある時は 最大語数だけの、列挿入をしてから上記「くぎり位置」の操作をすること。 ●(3)、(5)に対応するのはVBAでプログラムが必要でしょう。

その他の回答 (5)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.6

1.データ→区切り位置 の機能を使って、複合語を分割し、 2.1列にまとめる 3.ソートする 4.集計機能で集計 がオーソドックスな方法でしょうか。 下に質問にあることを行うコードを書いてみました。 分離記号を『Bunri = " "』に登録します。今は、全角空白です。 集計したいデータ範囲に『dTBL』の範囲名を付けておき、出力セル左上を1箇所指定しSyukeiを実行します。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入します。出てきたコードウインドウに下記マクロをコピーして貼り付けます。 Sub Syukei()   Dim dt() As String    '// データ用配列   ReDim dt(0) As String   '// データ用配列とりあえず確保   Const Bunri = " "    '// 分離記号(実際の分離記号をセットする)    Dim num As Integer    '// カウンタ   Dim rg As Range      '// セル   '// データを取り込む(データ範囲に『dTBL』の範囲名を付けておく)   For Each rg In Range("dTBL")     If InStr(rg, Bunri) Then       num = num + 1: If UBound(dt) < num Then ReDim Preserve dt(num)         dt(num) = Left(rg, InStr(rg, Bunri) - 1)     '// 左の文字を記憶       num = num + 1: If UBound(dt) < num Then ReDim Preserve dt(num)         dt(num) = Right(rg, Len(rg) - InStr(rg, Bunri))  '// 右の文字を記憶     End If   Next   '// データをソート(バブルソート)   Dim ct1 As Integer, ct2 As Integer   '// カウンタ   Dim wk As String            '// 作業用変数     For ct1 = 1 To UBound(dt) - 1       For ct2 = UBound(dt) To ct1 + 1 Step -1         If dt(ct2 - 1) > dt(ct2) Then           wk = dt(ct2 - 1): dt(ct2 - 1) = dt(ct2): dt(ct2) = wk         End If       Next     Next   '// 集計結果を出力   Dim writeRw As Integer    '// 結果を書く行   Dim Total As Integer     '// 個々の集計値   Dim allTotal As Integer    '// 個々の総計値   ReDim Preserve dt(num + 1)   dt(num + 1) = "最終"      For ct1 = 1 To UBound(dt) - 1     Total = Total + 1     If dt(ct1) <> dt(ct1 + 1) Then       ActiveCell.Offset(writeRw, 0) = dt(ct1)       ActiveCell.Offset(writeRw, 1) = Total       allTotal = allTotal + Total              writeRw = writeRw + 1: Total = 0     End If   Next   ActiveCell.Offset(writeRw, 0) = "総計"   ActiveCell.Offset(writeRw, 1) = allTotal End Sub

himeyuri123
質問者

お礼

みなさん、ありがとうございました。 少し自分には難しいところもありますが、とても参考になりました。

noname#9284
noname#9284
回答No.4

例えばA1に「りんご ばなな 1 」が入力されているのでしたらまた違った回答になります。 単純にA列に検索したい文字列が何個あるかを数えたいのでしたら、 まずB1から下に りんご ばなな みかん と、ありったけの検索したい文字列を入力しておきます。 C1に =SUMPRODUCT(NOT(ISERROR(SEARCH("*"&B1&"*",$A$1:$A$17,1)))*1) と入力し、これを下までコピーします。 しかし「りんご ばなな 1 」の「1」が重大な意味を持つのでしたらまた数式が違ってきます。

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.3

例えば、 1りんご ばなな 2りんご みかん が、A1:A2セルに入っているとすれば次のようになります。 ="りんご "&COUNTIF(A1:A2,"=*りんご*") 又は =COUNTIF(A1:A2,"=*みかん*")

noname#9284
noname#9284
回答No.2

統合機能を使われるか、ピボットテーブルではどうでしょうか。 どちらもデータメニューにあります。 統合でしたらデータ範囲を追加、追加としていきます。 ピボットテーブルでしたら最初に「複数のワークシート」をオンにして進みます。 何かご質問がありましたらまた書き込みをお願いいたします。

  • hinebot
  • ベストアンサー率37% (1123/2963)
回答No.1

今ひとつ現状が把握できません。 >例えばある列に >1りんご ばなな >2りんご みかん  >などと入力されています。 これは具体的にどのセルにどのデータが入っているのでしょうか? >この場合、データの集計を実行すると(中略)という結果になりますが、 この集計はどうやっているのでしょうか? お力になれるか分かりませんが、補足いただけると幸いです。

himeyuri123
質問者

補足

回答ありがとうございます。補足しますと、 (列番号→)     A           (行番号↓) 1     りんご  ばなな   2     りんご  みかん  …と、このような状態を意味しています。  一つのセルに2語入力されている状態です。  集計はデータを昇順に並べ替えてから、データメニューの集計を実行しています。 

関連するQ&A