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

エクセルで一覧表を作っています。
以下のようなことができるか、教えてください。

(例)
Sheet1(シート名:い)
A列   B列      C列  D列
田中  2017/3/1    100
鈴木  2017/3/1    50
佐藤  2017/3/5    100
鈴木  2017/3/8    80
佐藤  2017/3/11   260
山本  2017/3/19   160
田中  2017/3/22   200
田中  2017/3/28   300

Sheet2(シート名:ろ)
A列   B列      C列  D列
高橋  2017/3/4    170
山本  2017/3/9    120
高橋  2017/3/12   270
鈴木  2017/3/15   140
高橋  2017/3/17   200
高橋  2017/3/23   220
佐藤  2017/3/26   320

Sheet3(シート名:は)
A列   B列      C列  D列
田中  2017/3/15   150
山本  2017/3/23   180

例として上記のような表があります。

・シートが3つあり、それぞれ「い」・「ろ」・「は」という名前が付いています。
・A列には人の名前が入り、同じ人が何度も登場します。
・B列には時系列で日付が入ります。
 「名前+日付」の組み合わせで重複するものはありません。
・C列にはA列の名前の人の累計点数が入ります。
 何度も登場する場合は、下に行く程どんどん点数が上がります。
・表はこれからも、下にどんどん増えていきます。

この表に、点数に対する評価(ランク)を自動入力できるようにしたいのです。

《評価付けの条件》
 ・0~99:空白
 ・100~199:A
 ・200~299:B
 ・300~  :C
 ・同じ人が2回以上同じ評価になった場合は
  「A・B・C」の横に「+」が付く

(例)
Sheet1(シート名:い)
A列   B列      C列  D列
田中  2017/3/1    100  A
鈴木  2017/3/1    50
佐藤  2017/3/5    100  A
鈴木  2017/3/8    80
佐藤  2017/3/11   260  B
山本  2017/3/19   160  A+
田中  2017/3/22   200  B
田中  2017/3/28   300  C

Sheet2(シート名:ろ)
A列   B列      C列  D列
高橋  2017/3/4    170  A
山本  2017/3/9    120  A
高橋  2017/3/12   270  B
鈴木  2017/3/15   140  A
高橋  2017/3/17   200  B+
高橋  2017/3/23   220  B+
佐藤  2017/3/26   320  C

Sheet3(シート名:は)
A列   B列      C列  D列
田中  2017/3/15   150  A+
山本  2017/3/23   180  A+

上記のようにD列で評価を出したいのですが、
関数だけでこういうことが出来るでしょうか?

よろしくお願いいたします。

質問者からの補足コメント

  • どう思う?

    今回もお答えくださり、ありがとうございます。

    前の質問のやり方で…ということなので、作り直してみました。
    質問にある例とは列の配置が微妙に異なっています。

    A列には通し番号
    B列には名前
    C列には日付
    D列には登場何番目か
    E列には前回のシート名
    F列には前回の通し番号
    G列には点数
    H列には評価(ランク)←今回のメイン
    I列以降には作業列

    …となっています。作業列は全てのシートでI列以降になっています。

    「1回目であれば、そのままランクを表示し」は自分でも出来るのですが、
    H2=IF(D2=1,IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A",""))),【ここの部分がさっぱりわかりません!】)
    自分のレベルでは、情けなくも頭がパンクするばかりです。

    どうかご教示いただけないでしょうか?

    「3つのシートで散在するデータを名前別+日」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2017/03/16 20:30
  • HAPPY

    完成です!

    「3つのシートで散在するデータを名前別+日」の補足画像2
      補足日時:2017/03/17 11:30

A 回答 (2件)

そうですね。

今回の式であれば、
H2=IF(D2=1,IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A",""))),IF(INDIRECT(ADDRESS(F2+1,8,4,,E2))="",IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A",""))),IF(IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A","")))=LEFT(INDIRECT(ADDRESS(F2+1,8,4,,E2)),1),IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A","")))&"+",IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A",""))))))
の中に「IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A","")))」というのが多数出てくるので、これを作業列(列追加でズレるのが嫌であれば、専用の別シートでも可)に表示させてみます。
仮にAAA2に表示させたとすれば、
H2=IF(D2=1,AAA2,IF(INDIRECT(ADDRESS(F2+1,8,4,,E2))="",AAA2,IF(AAA2=LEFT(INDIRECT(ADDRESS(F2+1,8,4,,E2)),1),AAA2&"+",AAA2)))
となりますね。
INDIRECT(ADDRESS(F2+1,8,4,,E2))が空白かどうか関係なく
H2=IF(D2=1,AAA2,IF(AAA2=LEFT(INDIRECT(ADDRESS(F2+1,8,4,,E2)),1),AAA2&"+",AAA2))
でも構わない気がします。

重くなったのはこのH列の式を入れてからですか?
    • good
    • 0
この回答へのお礼

なるほど、繰り返し登場する式は、そうやって省略すればよいのですね!
勉強になります。これでデータのスリム化を図ろうと思います。

INDIRECT(ADDRESS(F2+1,8,4,,E2))が空白かどうか関係なく~の件ですが、前回の評価も今回の評価も空白だった場合、評価に「+」と表示されてしまいますのでそれを回避するために入れてあります。
質問の条件には書いていませんでしたね。失念しておりました、申し訳ございません。

動作が重くなったのは質問にある例示のものではなく、
仕事で実際に使っているデータの方でして、
「い」「ろ」「は」のシートで作業列を1万列ほどコピー、
「作業用の名前抽出」のシートで式を5万行ほどコピーしたところで
ファイルサイズが元の16倍ほど大きくなり、エクセルの挙動が怪しくなったのです。
ちょっと欲張りすぎました。もう少し減らそうと思います。

この度もご回答くださり、ありがとうございました。

お礼日時:2017/03/17 18:54

https://oshiete.goo.ne.jp/qa/9668242.html
これですよね?
前の質問のやり方で、前回データの位置が分かっているとして、
今回が1回目であれば、そのままランクを表示し、
2回目以降であれば、前回データのランク(+が付いている可能性があるので、LEFTで左の1文字のみ抽出)と今回のランクが等しければ、今回のランクに+をつけて表示、
等しくなければ、今回のランクをそのまま表示。
というふうにすれば、目的を達成できるかと思います。
この回答への補足あり
    • good
    • 0
この回答へのお礼

何だかんだ試してみたら出来ました!

H2=IF(D2=1,IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A",""))),IF(INDIRECT(ADDRESS(F2+1,8,4,,E2))="",IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A",""))),IF(IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A","")))=LEFT(INDIRECT(ADDRESS(F2+1,8,4,,E2)),1),IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A","")))&"+",IF(G2>=300,"C",IF(G2>=200,"B",IF(G2>=100,"A",""))))))

「これで完成した!やっと実践できる!」と思って本番のデータをいじり始めたのですが、
一つ一つの関数が長すぎて、また入力する欄が多すぎて、
データが激重化し、上書き保存すらままならないようになりました…。
これでは実用に耐えられません。
せっかく懇切丁寧に教えていただいたのに、残念でなりません。

関数にはこだわりません。
もう少しデータ量は増えずに、自動入力化できるような方法はないでしょうか?

お礼日時:2017/03/17 11:31

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