エクセルで一覧表を作っています。
以下のようなことができるか、教えてください。
(例)
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列で評価を出したいのですが、
関数だけでこういうことが出来るでしょうか?
よろしくお願いいたします。
No.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列の式を入れてからですか?
なるほど、繰り返し登場する式は、そうやって省略すればよいのですね!
勉強になります。これでデータのスリム化を図ろうと思います。
INDIRECT(ADDRESS(F2+1,8,4,,E2))が空白かどうか関係なく~の件ですが、前回の評価も今回の評価も空白だった場合、評価に「+」と表示されてしまいますのでそれを回避するために入れてあります。
質問の条件には書いていませんでしたね。失念しておりました、申し訳ございません。
動作が重くなったのは質問にある例示のものではなく、
仕事で実際に使っているデータの方でして、
「い」「ろ」「は」のシートで作業列を1万列ほどコピー、
「作業用の名前抽出」のシートで式を5万行ほどコピーしたところで
ファイルサイズが元の16倍ほど大きくなり、エクセルの挙動が怪しくなったのです。
ちょっと欲張りすぎました。もう少し減らそうと思います。
この度もご回答くださり、ありがとうございました。
No.1
- 回答日時:
これですよね?
前の質問のやり方で、前回データの位置が分かっているとして、
今回が1回目であれば、そのままランクを表示し、
2回目以降であれば、前回データのランク(+が付いている可能性があるので、LEFTで左の1文字のみ抽出)と今回のランクが等しければ、今回のランクに+をつけて表示、
等しくなければ、今回のランクをそのまま表示。
というふうにすれば、目的を達成できるかと思います。
何だかんだ試してみたら出来ました!
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",""))))))
「これで完成した!やっと実践できる!」と思って本番のデータをいじり始めたのですが、
一つ一つの関数が長すぎて、また入力する欄が多すぎて、
データが激重化し、上書き保存すらままならないようになりました…。
これでは実用に耐えられません。
せっかく懇切丁寧に教えていただいたのに、残念でなりません。
関数にはこだわりません。
もう少しデータ量は増えずに、自動入力化できるような方法はないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- 計算機科学 Excel ある行と列が交わったところにマークを付けるには 7 2023/01/24 08:46
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
エクセルで二つの数字の小さい...
-
LOOKUP関数を使えばいいのでし...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
エクセル 文字数 多い順 並...
-
VBAで文字列を数値に変換したい
-
2つのエクセルのデータを同じよ...
-
Excelで半角の文字を含むセルを...
-
エクセルの並び変えで、空白セ...
-
EXCELで 一桁の数値を二桁に
-
エクセルの表から正の数、負の...
-
Excel、市から登録している住所...
-
エクセルで文字が混じった数字...
-
A列がない・・・A列が非表示に...
-
エクセルの項目軸を左寄せにしたい
-
エクセルで一列おきに空白列を...
-
【ACCESS/必須条件とOR条件を組...
-
エクセルの隣り合う列のグループ化
-
エクセル(勝手に太字になる)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル(勝手に太字になる)
-
「B列が日曜の場合」C列に/...
-
エクセル 文字数 多い順 並...
-
EXCELで 一桁の数値を二桁に
-
エクセル 同じ値を探して隣の...
-
VBAで文字列を数値に変換したい
-
エクセルの並び変えで、空白セ...
-
Excelで半角の文字を含むセルを...
-
エクセルで文字が混じった数字...
-
Excel、市から登録している住所...
-
A列がない・・・A列が非表示に...
-
エクセルの表から正の数、負の...
-
[関数得意な方]教えて下さい・...
-
エクセルの項目軸を左寄せにしたい
-
エクセル 時間帯の重複の有無
-
Excelにてある膨大なデータを管...
おすすめ情報
今回もお答えくださり、ありがとうございます。
前の質問のやり方で…ということなので、作り直してみました。
質問にある例とは列の配置が微妙に異なっています。
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",""))),【ここの部分がさっぱりわかりません!】)
自分のレベルでは、情けなくも頭がパンクするばかりです。
どうかご教示いただけないでしょうか?
完成です!