アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして。エクセルでどのような式を入れていいのか悩んでいます。
下記のようなファイルで”列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”…と置き換えています。

何か良い方法がありましたら教えてください。
よろしくお願いいたします。

A 回答 (5件)

並べ替えてから処理するのであれば、



 イ) 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セルを下方にフィルすれば、基準値ごとに連番が振られますが、
これも質問文の数式ほど重くはないと思います。

以上ご参考まで。

この回答への補足

回答ありがとうございます。

いただいた数式は =E2+IF(D2=D3,0,1)
質問の表にあてはめると、=C2+IF(D2=D3,0,1) ですよね?
この数式でやってみたのですが、
C2、C3は1、C4、C5は2 とここまではいいのですが、
C6が3になってしまいます。C6もC2、C3と同じ1が欲しいのですが…

また並べ替える前の状態で…というのが質問の表にあてはめたら、
うまくいきました。今から、実際のものにあてはめてやってみます。
重くならないといいのですが…
お礼は後ほどしたいと思います。ありがとうごいました。

補足日時:2009/07/16 15:00
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/16 15:54

#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)))
とすれば、
並べ替えをしない状態で直接アルファベットを振れますが、
これはちょっと重いかも知れません。

ご参考まで。
「エクセルで並べ替えした値ごとにグループ分」の回答画像5
    • good
    • 0

回答No2です。


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

この回答への補足

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

補足日時:2009/07/16 14:41
    • good
    • 0

意味がよく読み取れないのですが、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)を超えると記号になってしまいますのでご注意)

この回答への補足

回答ありがとうございます。

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だったのですが…
同じ数字は同じアルファベットにしたいもので…

補足日時:2009/07/16 14:50
    • good
    • 0
この回答へのお礼

すみません。
先ほど、
C2はA、C3はA、C4はB、C5はB、C6はAとなったらOKだったのですが…

並べ替えた後と注釈がありましたね!
この方法でもうまくいきました、ありがとうございました。

お礼日時:2009/07/16 16:01

C2セルには次の式を入力し下方にオートフィルドラッグします。


=IF(A2="","",IF(COUNTIF(D$2:D2)=1,MAX(D$1:D1)+1,INDIRECT("C"&MATCH(D2,D:D,0))))
同じグループには同じ番号が付きます。番号別にグループ分けができます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!