• ベストアンサー

エクセルで並べ替えした値ごとにグループ分けしたい。

はじめまして。エクセルでどのような式を入れていいのか悩んでいます。 下記のようなファイルで”列D”の値ごとに 数字又はアルファベットなどでグループ分けを”列C”にしたいと思っています。   A   B   C   D 1 日付  曜日 区分 基準値 2 4/1  水  ここ 50010001500 3 4/2  木  ここ 50010001500 4 4/3  金  ここ 100015002000 5 4/4  土  ここ 100015002000 6 4/5  日  ここ 50010001500   ・ 34 5/3  日  ここ 200030005000   ・ 184 9/30 水   ここ 50010001500 列Dを並べ替えて、C2セルには =SUMPRODUCT(1/COUNTIF(D$2:D2,D$2:D2)) C3セルには =SUMPRODUCT(1/COUNTIF(D$2:D3,D$2:D3)) …そのままC184セルには =SUMPRODUCT(1/COUNTIF(D$2:D184,D$2:D184)) といった数式を入れたところ、D列の値ごとに数字をふれました。 …小数点の付いたものですが…サイトを検索して利用してみたので、 あまりSUMPRODUCTを理解していません。 しかしながら、重くなりすぎて、しまいには固まってしまいます。 このシートが80枚ぐらい入れたファイルです。 最終的にはこのファイルの隣に、導いた列Cの値をVLOOKUPにて ”1”を”A”、”2”を”B”…と置き換えています。 何か良い方法がありましたら教えてください。 よろしくお願いいたします。

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

  • ベストアンサー
  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.1

並べ替えてから処理するのであれば、  イ) C2セル : 1  ロ) C3セル : =E2+IF(D2=D3,0,1) として、C3セルを下方にフィルすれば足りるように思うのですが…。 ※(ロ)の数式は、単に =E2+(D3<>D2) としてもOKです。 ----------------------------------------- また、並べ替える前の状態で、  ハ) C2セル : 1  ニ) C3セル : =IF(ISNA(MATCH(D3,D$2:D2,0)),MAX(C$2:C2)+1,INDEX(C$2:C2,MATCH(D3,D$2:D2,0))) としてC3セルを下方にフィルすれば、基準値ごとに連番が振られますが、 これも質問文の数式ほど重くはないと思います。 以上ご参考まで。

masaiwa
質問者

お礼

ありがとうございました。 そんなに重くならずに、うまくいきました!

masaiwa
質問者

補足

回答ありがとうございます。 いただいた数式は =E2+IF(D2=D3,0,1) 質問の表にあてはめると、=C2+IF(D2=D3,0,1) ですよね? この数式でやってみたのですが、 C2、C3は1、C4、C5は2 とここまではいいのですが、 C6が3になってしまいます。C6もC2、C3と同じ1が欲しいのですが… また並べ替える前の状態で…というのが質問の表にあてはめたら、 うまくいきました。今から、実際のものにあてはめてやってみます。 重くならないといいのですが… お礼は後ほどしたいと思います。ありがとうごいました。

その他の回答 (4)

  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.5

#1です。 ご指摘の通り、  =E2+IF(D2=D3,0,1)  =E2+(D3<>D2) の数式は  =C2+IF(D2=D3,0,1)  =C2+(D3<>D2) のマチガイでした、すみません。 --------------------------------------------- >C6もC2、C3と同じ1が欲しいのですが… #1前半の数式は 「あらかじめD列で並べ変えてあること」を前提にしています。 D列で並べ替えてあれば、 離れた位置のセルが同じ区分になることはないと思うのですが? --------------------------------------------- なお、  ホ) C2セル : A  ヘ) C3セル : =IF(ISNA(MATCH(D3,D$2:D2,0)),CHAR(MAX(INDEX(CODE(C$2:C2),))+1),INDEX(C$2:C2,MATCH(D3,D$2:D2,0))) とすれば、 並べ替えをしない状態で直接アルファベットを振れますが、 これはちょっと重いかも知れません。 ご参考まで。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

回答No2です。 式を間違いました。次のようにしてください。 =IF(A2="","",IF(COUNTIF(D$2:D2,D2)=1,MAX(D$1:D1)+1,INDIRECT("C"&MATCH(D2,D:D,0))))

masaiwa
質問者

補足

回答ありがとうございます。 いただいた数式を入力してみたのですが、 上記、C2、C3、C6のセルは”1”となりましたが、 C4、C5のセルには”50010001501”と出てきます。 C34のセルには”100015002001”で出てきてしまいました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

意味がよく読み取れないのですが、D列の値が同じもの同士をグルーピングできれば良いということでしょうか? D列が数値になっているなら、 そのままC2に =RANK(D2,D$2:D$184,1) みたいに入力して下にオートフィルすると、同じ数字は同じランク(1、2、3…)になります。 (式中の範囲は必要に応じて調整してください) >列Dを並べ替えて、C2セルには~~ 並べ替えた後でよいのなら、 C2にA(固定)入れておいて、C3には =IF(D3=D2,C2,CHAR(CODE(C2)+1)) として下にオートフィルすれば、A、B、C…が表示されます。 (種類が26(=Z)を超えると記号になってしまいますのでご注意)

masaiwa
質問者

お礼

すみません。 先ほど、 C2はA、C3はA、C4はB、C5はB、C6はAとなったらOKだったのですが… 並べ替えた後と注釈がありましたね! この方法でもうまくいきました、ありがとうございました。

masaiwa
質問者

補足

回答ありがとうございます。 RANKの数式で試したところ、C2~C6セル(4/1~4/5)までに =RANK(D2,D$2:D$6,1) としてみたのですが、 答えは C2は1、C3は1、C4は4、C5は4、C6は1となり、 1位3つで、次が4位になってしまうようです。 また =IF(D3=D2,C2,CHAR(CODE(C2)+1)) を試したのですが、1発でアルファベットが振れたらスゴイ! と思ったのですが、 この答えはC2はA、C3はA、C4はB、C5はB、C6はC となってしまいました。 C2はA、C3はA、C4はB、C5はB、C6はAとなったらOKだったのですが… 同じ数字は同じアルファベットにしたいもので…

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

C2セルには次の式を入力し下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(D$2:D2)=1,MAX(D$1:D1)+1,INDIRECT("C"&MATCH(D2,D:D,0)))) 同じグループには同じ番号が付きます。番号別にグループ分けができます。