• ベストアンサー

複数の重複する文字を一つのセルにまとめて計算するには?

エクセルにて重複する文字をまとめて、その値を計算したいのですが、 中々うまくいかなく困っております。        A      B        E     F  1|リンゴ| 50円|    |りんご| 150円|  2|みかん| 50円|    |みかん| 250円|  3|ぶどう| 400円|→   |ぶどう| 400円|  4|みかん| 200円|  5|りんご| 100円| 上記の表(A,B)の様にランダムに同じ商品名と価格が表示されています。 Eには重複する商品名をまとめて表示し、Fにはその重複商品の合計の数字を計算して表示したいのですが、何か良いアドバイスは無いのでしょうか? ※条件は、A列は常に同じ商品名ではなく変更する事があります。マクロには商品名そのものは使えません。 ※商品名(A)と価格(B)は「品名・価格登録シート」という別なシートから取得しております。 ※マクロでの処理でも何でも良いですので何卒ご教授宜しくお願い致します。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

私も#02さんと同様ピボットテーブルが一番簡単だと思いますが、関数式で実現する方法で回答してみます まず質問の表でB列の値は「円」を取って数値のみに変更してください。(あるいは数値だけ入力してセルの書式で「#,##0円」にしましょう。そうしないと合計が出せません E1の式は以下です。貼り付けて下方向にコピーしてください =INDEX(A:A,LARGE(INDEX((MATCH($A$1:$A$5,$A$1:$A$5,0)=ROW($A$1:$A$5))*ROW($A$1:$A$5),),COUNT(INDEX(1/(MATCH($A$1:$A$5,$A$1:$A$5,0)=ROW($A$1:$A$5)),))-ROW(A1)+1)) でも4行目以降は#N/Aエラーになります。エラーを表示したくないなら式は長くなりますが、以下の式に差し替えてください。 =IF(COUNT(INDEX(1/(MATCH($A$1:$A$5,$A$1:$A$5,0)=ROW($A$1:$A$5)),))+1>ROW(A1),INDEX(A:A,LARGE(INDEX((MATCH($A$1:$A$5,$A$1:$A$5,0)=ROW($A$1:$A$5))*ROW($A$1:$A$5),),COUNT(INDEX(1/(MATCH($A$1:$A$5,$A$1:$A$5,0)=ROW($A$1:$A$5)),))-ROW(A1)+1)),"") F2の式は =SUMIF($A$1:$A$5,E1,$B$1:$B$5) になります ただし「リンゴ」「りんご」を同じ項目と見なすことはできませんのでご了承ください

hassyrock
質問者

お礼

ありがとうございます!!! 凄いです! まさかINDEX、LARGE、INDEX、COUNT、MATCH関数の合わせ技でできるなんて考えもしませんでした。 ※こりゃマクロでないとダメだなと思っていました。 かなり勉強になりました。 今回はファイルが重くなりますので、ピポットを使用したいと思います。

その他の回答 (2)

  • shibisei
  • ベストアンサー率37% (10/27)
回答No.2

「ピボット」若しくは「統計」を使えば簡単です。 そちらのEXCELのバージョンが不明なので操作方法は省略します。

hassyrock
質問者

お礼

ありがとうございます。 さっそく調べてみます。 ちなみにEXCELは2003sp3です。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

次の方法は如何でしょうか。 F1セルに=SUMIF(A:A,E1,B:B)として下方向にコピーして下さい。 因みにB列は数値と想定しています。

hassyrock
質問者

お礼

早速のご回答ありがとうございます。 私の質問内容が良くないですね。 問題はE列です。 (E)列は(A)列から取得します。←これが一番のネックです。 (A)列には“同じ名前の商品”があるので、同じ商品名は(E)にてまとめます。 (A)(B)列は「品名・価格登録シート」から取得しています。  ※これは別シートで変更や追加ができる様にしています。 宜しくお願い致します。

関連するQ&A