• 締切済み

同じ文字列の隣の数値を合計し、その多い順にリスト化

よろしくお願い致します。 Excel の計算式と作業列のみを用い、同じ文字列の隣の数値を合計し、その多い順にリスト化する方法についてお知恵をお貸しください。 やりたいことは以下になります。 ばななが合計7、りんごが合計5、みかんとなしが合計3なのでC列の通り合計か大きい順番に表されます。 A     B C りんご  1  ばなな     ばなな  2     りんご みかん  3 みかん りんご 4     なし ばなな 5 なし 3 みかんとなしは同数ですが、 上にあるみかんがつ先にきます。 以上、よろしくお願い致します。

みんなの回答

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

ご質問のデータ処理は関数でも対応できますが、ピボットテーブルを利用することをお勧めします。 行フィールドに果物名Σ値に個数を配置すれば添付画像のようなリストが作成されます。 集計セルの上で「データ」「並べ替え」でZ↓Aのアイコンをクリックすればご希望の降順の表示になります。 同数の場合に順を逆にしたいときは、そのデータ範囲を選択して周囲をドラッグアンドドロップして入れ替えます。 データの追加に対応したいなら(ピボットテーブルのデータ範囲を自動拡張したい場合))、元データの範囲を、ホームタブの「テーブルとして書式設定」してください。

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.4

「よろしくお願い致します」ったって、 前回( http://okwave.jp/qa/q9100070/a25336948.html )と殆ど同じ質問じゃないですか? 結果だけを添付図に。 解法は同じだから解説ナシ!前回を学習されたし!

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

 今仮に元の表がSheet1上に存在するものとします。 【方法その1】  作業列を1列しか使いませんが、Sheet1のB列に入力されている数値が0以上99999999以下の整数値であるという前提条件が必要となる方法です。  まず、適当な使用していないシート(ここでは仮にSheet2とします)のA1セルに次の関数を入力して下さい。 =IF(INDEX(Sheet1!$A:$A,ROW())="","",IF(COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=1,SUMIF(Sheet1!$A:$A,INDEX(Sheet1!$A:$A,ROW()),Sheet1!$B:$B)*10000000-ROW(),""))  次に、Sheet2のA1セルをコピーして、Sheet2のA2以下に貼り付けて下さい。  次に、Sheet1のC1セルに次の関数を入力して下さい。 =IF(ROWS(C$1:C1)>COUNT(Sheet2!$A:$A),"",INDEX($A:$A,MATCH(LARGE(Sheet2!$A:$A,ROWS(C$1:C1)),Sheet2!$A:$A,0)))  次に、Sheet1のC1セルをコピーして、Sheet1のC2以下に貼り付けて下さい。  方法その1は以上です。 【方法その2】  作業列を2列使用しますが、Sheet1のB列に入力されている数値に制限が無い方法です。  まず、適当な使用していないシート(ここでは仮にSheet3とします)のA1セルに次の関数を入力して下さい。 =IF(INDEX(Sheet1!$A:$A,ROW())="","",IF(COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=1,SUMIF(Sheet1!$A:$A,INDEX(Sheet1!$A:$A,ROW()),Sheet1!$B:$B),""))  次に、Sheet3のB1セルに次の関数を入力して下さい。 =IF(ISNUMBER($A1),RANK($A1,$A:$A)+COUNTIF($A$1:$A1,$A1)-1,"")  次に、Sheet3のA1~B1のセル範囲をコピーして、Sheet3のA列~B列の2行目以下に貼り付けて下さい。  次に、Sheet1のC1セルに次の関数を入力して下さい。 =IF(ROWS(C$1:C1)>COUNT(Sheet3!$B:$B),"",INDEX($A:$A,MATCH(ROWS(C$1:C1),Sheet3!$B:$B,0)))  次に、Sheet1のC1セルをコピーして、Sheet1のC2以下に貼り付けて下さい。  方法その2は以上です。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.2

何でも皆さん関数でやりたがりますけど 何でも自動で即座にってのは悪い 面の方が大きいように思いますけどね。 ■C1 =IF(COUNTIF(A$1:A1,A1)=1,-SUMIF(A:A,A1,B:B)*10-1/ROW(),0) ■D1 =IFERROR(INDEX(A:A,1/MOD(-SMALL(C:C,ROW(A1)),10)),"") C1:D1を下方向にコピー

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 作業列、沢山使っちゃいます。 セルD1に =SUMIF(A:A,A1,B:B) で、下方にフィルコピー セルE1に =MATCH(LARGE($D:$D,ROW($E1)),$D:$D,0) セルE2に =IF(LARGE($D:$D,ROW($A1))=LARGE($D:$D,ROW($A2)),MATCH(LARGE($D:$D,ROW($E2)),INDIRECT("D"&($E1+1)&":$D$10000"),0)+$E1,MATCH(LARGE($D:$D,ROW($E2)),$D:$D,0)) で、下方にフィルコピー セルF1に =INDEX(A:A,$E1,1) セルG1に =COUNTIF($F$1:F1,F1) セルH1に =SUMIF($G$1:G1,1) セルI1に =ROW() で、セルF1:I1 を下方にフィルコピー セルC1に =IFERROR(INDEX(F:F,MATCH(I1,H:H,0)),"") で、下方にフィルコピー

関連するQ&A