Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
連続していない場合のランク付
投稿日時: 17/07/14 09:35:07
投稿者: Tamao

グランドゴルフの集計(70名)をやっています。
 
 列 A  B  C  D
行1        順位
 2 合計 30    ?
 3    21
 4 合計 62    ?
 5    23
 6 合計 27    ?
 7    43
 8    21
 9 合計 60    ?
 
上記のような表があり合計が1行または数行離れています。
合計行のみの順位を付けたい。
 
よろしくお願いします。

回答
投稿日時: 17/07/14 12:03:54
投稿者: Suzu

こんにちは。
 
作業列を作ってはどうでしょう。
 
G列 等 に
 =IF(A2="合計",B2,"") の様にしては、
 
あとは順位を出す数式に、"" の行はエラーになるので、IFと、ISERROR の組み合わせ、IFERROR を使用しましょう。

回答
投稿日時: 17/07/14 13:47:39
投稿者: Mike

  A  B C  D
1      順位
2 合計 30 30  3
3   21   
4 合計 62 62  1
5   23   
6 合計 27 27  4
7   43   
8   21   
9 合計 60 60  2
 
C2: =IF(A$2:A$9="合計",B$2:B$9,"")
D2: =IFERROR(RANK.EQ(C2,C$2:C$9),"")

投稿日時: 17/07/14 16:46:04
投稿者: Tamao

Suzuさん、Mikeさん
 
早速のご指導ありがとうございます。
出来ました。
 
よろしければ作業列を使わない方法はありませんか。
申し訳ありません

回答
投稿日時: 17/07/14 17:00:12
投稿者: んなっと

可能な限り作業列を使いましょう。
 
以下の式はどちらも悪い例です。
 
   A  B C   D
1        順位
2 合計 30    3
3    21     
4 合計 62    1
5    23     
6 合計 27    4
7    43     
8    21     
9 合計 60    2
 
Excel2007以降
D2
=IF(A2="合計",COUNTIFS(A:A,"合計",B:B,">"&B2)+1,"")
下方向・↓
 
Excel2003以前
D2
=IF(A2="合計",SUMPRODUCT((A$2:A$100="合計")*(B$2:B$100>B2))+1,"")

回答
投稿日時: 17/07/14 18:02:40
投稿者: Mike

Tamao さんの引用:
作業列を使わない方法はありませんか
参考までに、作業列を忌み嫌う理由は何ですか?

投稿日時: 17/07/15 10:26:35
投稿者: Tamao

Mikeさん
 ありがとうございます。
 
作業列を忌み嫌う理由は何ですか?
 
嫌っているわけではありません。
ただ「作業列を使わずにできないかな」と思っただけです。

回答
投稿日時: 17/07/15 15:46:35
投稿者: Mike

Tamao さんの引用:
ただ「…」と思っただけです
「だけ」でしたか、
んなっとさんが見事な回答をされていますね。

回答
投稿日時: 17/07/16 10:48:11
投稿者: sy

んなっと さんの引用:
可能な限り作業列を使いましょう。
以下の式はどちらも悪い例です。
D2=IF(A2="合計",COUNTIFS(A:A,"合計",B:B,">"&B2)+1,"")

今回の質問内容で、なぜCOUNTIFSが悪い例なんですか?
こう言う使い方は一般的ではなくテクニックの部類には入ると思いますが、式の組み立て方としてはそうトリッキーな組み立て方では無いと思いますが?
式の組み立て方としては、ヘルプの使用例にも載ってるような当たり前の組み立て方ですよね。
 
 
Mikeさんの例を比較に出して申し訳ありませんが、作業列を使っても配列を二重で扱うなら作業列を使うメリットが無いですよね。
C2: =IF(A$2:A$9="合計",B$2:B$9,"")
C列は配列にする必要性は全く無いですよね、無駄に重くしているだけで逆にデメリットになってると思います。
Suzuさんも提示してますが以下のように単一セルで計算するなら問題は無いですが、
C2 =IF(A2="合計",B2,"")
それと今回のような場合作業列を使ったからと言って、式やデータの流れが特別分かりやすくなる訳でもないですよね。(全くとは言いません、後述しますが)
COUNTIFSの方も単純で充分分かりやすいと私は思いますよ。
 
 
式を自分で組み立てられない内は、提示された作業列の式をまず充分理解して、数式の組み立て方に慣れてから一発式に挑戦した方が良いよと段階を踏むようにアドバイスしてると言うなら私も大賛成ですが、
もしも無条件に何でもかんでも一発式は悪い、作業列が良いと言う考え方での発言としたら、それはどうかと思います。
その辺はどうなのでしょうか?
 
 
私は作業列を使う方が良い理由として以下のような場合を想定していますが、以下に1つも該当しない場合は逆にデメリットしか無いので作業列を使わない方が良いと思っています。
今回は当てはまるのは強いて言えば4にだけ該当しそうですけど、上でも述べましたけど要件からはあまり間違いやデバッグが後で発生する可能性はかなり低いと思うので、作業列を使うメリットを感じません。
私が挙げた理由以外に積極的に今回のCOUNTIFSのような式を否定する理由があるならご教示ください。
1、共通の参照範囲の場合、参照回数を省略できる=効率化
2、長くなりすぎて複雑化した式を、分解して一つ一つの式を短くして分かりやすく出来る=式の単純化及び簡単化
3、ヘルプに載ってないようなトリッキーな使い方をしない=慣れてない人でもとっつきやすくなる
4、段階的に計算する事でデータの流れを分かりやすくする=間違い防止とデバッグの容易化

投稿日時: 17/07/18 09:15:06
投稿者: Tamao

皆さんありがとうございました