[Excel]重複数のトップテンの作り方

このQ&Aのポイント
  • Excelの関数を使って重複したデータの「重複数のトップテン」を作成する方法について教えてください。
  • 現在はCOUNTIFを使用していますが、より簡単な方法や参考になるURLがあれば教えてください。
  • 具体的なデータの例を挙げながら、重複したデータの「日付」部分をカウントして、「モノが売れた日トップテン」を取得する方法を知りたいです。
回答を見る
  • ベストアンサー

[Excel]重複数のトップテン

添付画像の赤枠ように、Excelの関数を使って重複したデータの「重複数のトップテン」 を作成したいのですが、COUNTIFを使って重複数を出したは良いものの、その先がわかりません。 (※画像内の赤枠は手動で作成したサンプルです) 実際には、「日付」「商品名」といったデータがあり、例として下記のようになっております。 20XX/10/01 みかん 20XX/10/01 みかん 20XX/10/01 りんご 20XX/10/02 みかん 20XX/10/03 りんご 20XX/10/03 りんご 上記データの「日付」部分をカウントし、「モノが売れた日トップテン」を取得したいのです。 上記の例では 1位: 3個売れた 20XX/10/01 2位: 2個売れた 20XX/10/03 3位: 1個売れた 20XX/10/02 となります。 実際には、データ数は膨大ですので、添付画像のように同じ個数売れた日が複数あります。 それを、赤枠のサンプルのように取得・表示したいのです。 現在は、COUNTIFを用いておりますが、更に簡単な方法がありましたら、COUNTIFを使用しない方法でも構いません。 良い方法、または参考になるURL等ありましたらご教示願います。 よろしくお願い致します。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一例です。 >実際には、データ数は膨大ですので・・・ とありますので、これから説明する方法は不向きかもしれません。 (配列数式を使っています) とりあえずやり方だけ! ↓の画像のように作業用の列を設けています。 そして、B列の数式を少し変更します。 B2セルに =IF(COUNTIF($A$2:A2,A2)=1,COUNTIF(A:A,A2),"") 作業列C2セルに =IF(B2="","",IF(COUNTIF($B$2:B2,B2)=1,RANK(B2,B:B),"")) という数式を入れ、B2・C2セルを範囲指定しC2セルのフィルハンドルでずぃ~~~!っと下へコピーしておきます。 H3セルに =IF(COUNT(C:C)<ROW(A1),"",INDEX(B:B,MATCH(SMALL(C:C,ROW(A1)),C:C,0))) としれこれも下へコピー I3セル(配列数式になってしまいます)に =IF(OR($H3="",COUNTIF($B:$B,$H3)<COLUMN(A1)),"",INDEX($A$1:$A$1000,SMALL(IF($B$1:$B$1000=$H3,ROW($A$1:$A$1000)),COLUMN(A1)))) ※ この画面からI3セルにコピー&ペーストする場合はI3セルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 とりあえず1000行目まで対応できる数式にしていますが、 データ量によっては表のレイアウトを考え直すか、VBAでの方法が良いかもしれませんね。 今はこの程度しか思いつきませんが、 参考にならなかったらごめんなさい。m(_ _)m

MarbleC
質問者

お礼

回答ありがとうございます。 予想以上に複雑な関数式になるのですね。。。 まずは教えて頂きました方法を理解できるよう調べつつ、実環境で試してみたいと思います。 また、VBAを用いる方法も検討してみたいと思います。 アドバイス有難うございました。

その他の回答 (2)

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

関数式でやろうとすると、 (1)理解しにくい「多数の関数の組み合わせ」になり式が長くなる (2)配列数式というものになる たりする。 それでもよければ(コピペして、うまく行きました、ありがとう式の質問者がほとんど)だが)下記は無視して。 ーーー 作業列を使うことを提案したい 例データ 日付 品物 20XX/10/01 みかん 20XX/10/01 みかん 20XX/10/01 りんご 20XX/10/02 みかん 20XX/10/03 りんご 20XX/10/03 りんご II1に日付と入れる データーフィルターフィルタオプションの設定 指定した範囲 ON リスト範囲 $A$1:$A$7 衆出範囲$H$1:$H$100 重複するレコードは無視する ON 検索条件範囲は何も入れない。 ーー 結果 H列 と I列(=次のステップの結果) 日付 20XX/10/01 3 20XX/10/02 1 20XX/10/03 2 I2の式は =COUNTIF($A$2:$A$100,H2) <--A100の100などは適宜増やして 下方向に式複写。 結果上記I列。 ーー その中で一番件数が多いのは =LARGE(I2:I100,1)  <--J10セルに入れるとする その日付は =INDEX($H$1:$H$100,MATCH(J10,$I$1:$I$100,0)) 20XX/10/01 2番目以降もLargeの第2引数の1を2にしたりする。連続した順位なら、ROW()-9などで式複写で導出できる。

MarbleC
質問者

お礼

回答ありがとうございます。 私の考えていた抽出手順と違い、 1.オートフィルタで、日付の重複データを省いたデータを取得 2.1で取得したデータをもとにCOUNTIFで重複数を取得 3.1と2で取得したデータからランキングを表示 といった手順でしょうか? 用いる関数式が簡略化されるので、良さそうですね。 この方法についても、実環境で試してみたいと思います。 有難うございました。

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

 今仮に、A1セルとI1セルに「日付」、B1セルに「商品名」、 G1セルに「ランク」、 H1セルに「カウント」、と入力されているものとし、D列とE列を作業列として使用するものとします。  まず、D2セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER(INDEX($A:$A,ROW())),COUNTIF($A$1:INDEX($A:$A,ROW()),INDEX($A:$A,ROW()))=1),COUNTIF($A:$A,INDEX($A:$A,ROW())),"")  次に、E2セルに次の数式を入力して下さい。 =IF(ISNUMBER($D2),$D2+(MAX($A:$A)-INDEX($A:$A,ROW()))/MAX($A:$A),"")  次に、D2~E2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  次に、H2セルに次の数式を入力して下さい。 =IF(MIN(H$1:H1)=MIN($D:$D),"",LARGE($D:$D,COUNTIF($D:$D,">="&MIN(H$1:H1))*(ROWS($1:1)>1)+1))  次に、G2セルに次の数式を入力して下さい。 =IF(ISNUMBER($H2),ROWS($2:2),"")  次に、I2セルに次の数式を入力して下さい。(I2セルの書式設定はA列のセルと同じ設定にして下さい) =IF(AND(ISNUMBER($H2),COLUMNS($I:I)<=COUNTIF($D:$D,$H2)),INDEX($A:$A,MATCH(LARGE($E:$E,COUNTIF($D:$D,">"&$H2)+COLUMNS($I:I)),$E:$E,0)),"")  次に、G2~I2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  次に、I列全体をコピーして、I列よりも右にある列の範囲に貼り付けて下さい。

MarbleC
質問者

お礼

回答ありがとうございます。 やはり関数式で表現すると、複雑なものになってしまうのですね。 お教えいただいた方法についても、実環境で試させて頂き、 検討してみたいと思います。 有難うございました。

関連するQ&A

  • エクセルの重複データ、必要数を指定して絞る

    エクセルの重複データ、必要数を指定して絞ることは可能ですか。 エクセル2010です。 マクロはよくわからないので、マクロを組まねばならないようでしたらあきらめます。 たとえばある列に (別の列もデータがあります。 この列を基点にしぼるイメージです) りんご りんご りんご りんご りんご りんご りんご りんご バナナ バナナ バナナ バナナ バナナ バナナ みかん みかん みかん みかん みかん みかん みかん みかん みかん みかん と、個数がランダムで同データがあるような場合に りんご りんご りんご りんご りんご バナナ バナナ バナナ バナナ バナナ みかん みかん みかん みかん みかん と5個に絞るということです。 「重複するレコードは無視する」としたときに1つにしぼられますが、 1つでなく、5つに絞るようなイメージです。 そのような指定がなんらかで可能でしょうか。 テキストフィルターをうまく使えばできたりするでしょうか。 よろしくお願い致します。

  • (EXCEL)重複したデーターの抽出について

    EXCEL2003 シート「sheet1」に下記のようなデーターがあります。 <sheet1>   A   B   C  D 1 りんご 青森 AAA BBB 2 みかん 愛媛 CCC DDD 3 みかん 青森 AAA BBB 4 りんご 青森 AAA BBB 5 みかん 愛媛 CCC DDD A列とB列が同じ値のものをシート「sheet2」に重複しているデーター は1行だけになり、E列にカウントした数が入力されるようにしたいです。 (C列やD列は同じ値でなくてもA列とB列が同じ値の時にカウントして抽出したいです) <sheet2>   A   B   C  D   E  りんご 青森 AAA BBB  2  みかん 愛媛 CCC DDD  2   ご教示のほどお願いします。

  • エクセルで別の行に並んだ重複データをチェックしたい

    ネットで色々調べてはみたのですがやり方がいまいち見つからずどなたかお力添えいただけると幸いです 同じ行にならんでいるデータ内で重複するものを見つける関数はわかったのですが 別の行に並んでいるそれぞれのデータで重複するものを見つけるやり方はありますか? 例)      A    B 1  みかん  りんご 2  みかん  ぶどう 3  りんご   もも 上記の場合、A3のりんごとB1のりんごが重複していますがこれを探したいのです ※A1のみかんとA2のみかんは含みません 不慣れな質問で大変恐縮ですが何卒よろしくお願いいたします

  • エクセル COUNTIF 正しい重複がでない。

    エクセル2007を使っています。 添付画像のようにCOUNTIFを使って重複をチェックしたいのですが、 35-1、1935-1、1935/1/1がすべて重複としてでてしまいました。 A列を文字列にしても重複となってしまいました。 解決方法はありますでしょうか。

  • Excelで重複データの件数ではなく、何番目かを求める方法

    下記のような表があり、A列に入っている値が重複している場合、 B列に件数を求めるにはCOUNTIF関数を使いますが、件数ではなく、 何番目かを求めることはできるのでしょうか。  A列   B列  りんご 1  りんご 2  みかん 1  りんご 3  バナナ 1  みかん 2 すみませんが、ご教授いただけたら幸いです。 宜しくお願い致します。

  • エクセル のマクロで 複数の表を1つにまとめたい

    エクセル のマクロで 複数の表を1つにまとめたい 下記のようなシートがあります。 Sheet1 A B C E F G I J K 1 日付  品名 数 日付  品名 数 日付  品名 数 2 1/1  みかん 100 1/2 りんご 50 1/1 バナナ 30 3 1/5  みかん 50 1/6 りんご 25 1/7 バナナ 20 4 1/10 みかん 30 1/11 りんご 15 1/10 バナナ 10 5 1/12 りんご 30 1/11 バナナ 10 6 1/13 りんご 50 みかん・りんご・バナナのそれぞれの表をマクロで下記のような1つの表ににまとめたいのですが どのようにしたら良いかご教授お願いいたします。 (初心者なので可能であればマクロ内で’コメント付きで解説いただけると助かります)  M N O 1 日付 品名 数 2 1/1 みかん 100 3 1/1 バナナ 30 4 1/5 みかん 50 5 1/6 りんご 25 6 1/7 バナナ 20 7 1/10 みかん 30 8 1/10 バナナ 10 9 1/11 りんご 15 10 1/11 バナナ 10 11 1/12 りんご 30 12 1/13 りんご 50 うまく説明できないのでイメージ画像を添付いたします。

  • エクセルで重複データの編集

    次のようなデータがあります。     商品名 | 産地 | 店名 | 1行  みかん   静岡   あ 2行  りんご   青森   い 3行  みかん   愛媛   う 4行  みかん   静岡   え 5行  りんご   長野   お 6行  みかん   愛媛   か            実際には列の項目はもっとあります。 行も3万件ほどあります。 これを「商品名」「産地」などの重複する行を 一つにまとめ「店名」のみを結合した表を作成したいです。     商品名 | 産地 | 店名 | 1行  みかん   静岡   あ・え 2行  りんご   青森   い 3行  みかん   愛媛   う・か 4行  りんご   長野   お 重複データの抽出・削除だけでなく、一部分を 結合させて表示させる方法がわかりません。 よろしくお願いします。

  • Excel 2つの重複データに重複先セル番地を表示させたい!

    お世話になります。 エクセルで2つの重複しているデータがランダムにがあります。 下記のように表示いたいのですが、良いほうを教えて下さい。 たとえばA1のみかんがA7と重複している時【7】と表示したい ※VBAはわかりません。関数は得意です。  よろしくお願いします。 A  B C 1  7 みかん 2  5 りんご 3    もも 4  6 なし 5  2  りんご 6  4  なし 7  1  みかん 8  9  ぶどう 9  8  ぶどう

  • 条件に当てはまる物の種類の数を数える

    エクセルでA列に品物、B列に重さが入っている表があります。 ―――――――――― |品物 |重さ  | ―――――――――― |りんご|20  | |みかん|5   | |りんご|20  | |りんご|10  | |みかん|7   | |りんご|30  | |みかん|5   | |りんご|10  | |りんご|50  | |ばなな|11  | ―――――――――― この表から条件に当てはまるものの種類を出したいのですがどうしたらよろしいでしょうか。 「重さが10以上の種類の数」を出したいです。答えが2(りんごとばなな)になります。 種類はSUMPRODUCT(1/COUNTIF(A2:A11,A2:A11)) で出せるのですが、これに10g以上という条件の付加するにはどのような方法があるでしょうか。 宜しくお願いいたします。

  • 重複データをカウントするのに便利なSQL文

    phpで検索結果画面の制作を勉強中です。 pdoでmysqlデータベースに接続しています。 添付画像のように、 重複しているデータをひとつにまとめ、それぞれの重複数を取得するようなSQL文はないでしょうか? ちなみにできれば、添付画像のように、 フォームで入力されたテキストをもとに、 WHERE文でカラム名をあいまい検索をした上で 該当する重複レコードのカラム名を1つだけ表示し、その横に重複数を表示したいです。 フォームのテキストをもとにあいまい検索をする方法は理解しておりますので、 該当する重複レコードのカラム名を1つだけを取得し、その重複数も取得できるようなSQL文があれば教えていただきたいです。 色々と試しては見たのですが、中々上手くいかずに悩んでいます。 ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう