[[20040130120623]] 『ゴルフのスコア表』(うり) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ゴルフのスコア表』(うり)

 ゴルフのスコア表を作るように言われたのですが
 上手に色付け出来ずに困っています。教えて下さいお願いします。
           
 A      B  C    D     E      F    G
           第一回コンペ           |     第二回コンペ
 2名前    年齢 ハンデ  スコア  ネットスコア |名前    年齢   ・・・
 3石川    50  10  110   100   |
 4斉藤    48  15  128   113   |
 5高橋    52   8  105    97   |

 50人くらい並んでいます。
 各コンペごとに
 ネットスコアの1番小さい数字に赤 2番目が青 3番目が緑と色付けしたいのです。
 かりに2番目が2人いたら年齢の高い人が2番 若い人が3番目になるそうです。
 どのようにしたら???いいのでしょうか?
 条件付書式?関数?方法はかまいません
 宜しくお願いします。

 LARGE関数は試されましたか?

 あと年齢も同じ時は?

  (INA) 

 条件が複数絡んでいますので、一度では少し難しいようです。

 各コンペごとに、ネットスコアの右に一列挿入して(新 F列)
 F3 に
 =IF(COUNTIF(E$3:E$5,E3)=1,RANK(E3,E$3:E$5,1),(RANK(E3,E$3:E$5,1)+RANK(B3,B$3:B$5,0)/2))
 として、下にコピー

 E3:E5 を選択して
 条件付書式
 条件1 =F3=SMALL(F$3:F$5,1)     [赤]
 条件2 =F3=SMALL(F$3:F$5,2)     [青]
 条件3 =F3=SMALL(F$3:F$5,3)     [緑]

 として、、、ダメでしょうか??

 これは、各コンペごとに設定の必要がありますが。
 挿入列は、非表示にするか、都合に応じてお好きな列に、式も修正です。   (jun53)

 INAさん junさん有難うございます。
 junさんの方法で試させていただいたところ
 運悪く?年齢も同じ人がいて・・・ 
 3位が2人になり2位が居なくなってしまいました
 年齢も同じ場合はハンデが少ない人が上位になるそうです。
 どのようにしたら?よいのでしょうか?

 F3 に
 =IF(COUNTIF(E$3:E$5,E3)=1,RANK(E3,E$3:E$5,1),(RANK(E3,E$3:E$5,1)+RANK(B3,B$3:B$5,0)/2)) 
 ↓
 =IF(COUNTIF(E$3:E$5,E3)=1,RANK(E3,E$3:E$5,1),(RANK(E3,E$3:E$5,1)+RANK(B3,B$3:B$5,0)/2)+C3/3)
 で、どうでしょうか?

 ネット、年齢、ハンデが同じなら...???
 でも、親睦コンペ?は和気藹々
 入賞者が沢山いて「良かったですね〜」とはいかないですかね(笑)   (jun53)

 う〜〜ん???
 どこか間違ってしまったのでしょうか?
 順位が小数点になってしまいました。

 あと上記の関数の説明をしていただけませんでしょうか?
 IFとRANKは使ったことが数回ありますが、
 RANKにRANKをたす???
 これだけ長い関数は・・・おつむ弱しの私には・・・
 あれこれ言ってすみません 宜しくお願いします。

 それとネット、年齢、ハンデが同じときはジャンケンになるそうです。(笑)
 (うり)

 私の質問には答えて頂けないようですので、
 あとは jun53さんにお任せして退散いたします。 

  それでは失礼します〜\(^^) 
   (INA)

 えっ!えっ!ごめんなさい
 そんな〜 どうしましょう・・・
 気分を害するようなことをしてしまって本当にすみません
 そうですよね、質問だけしておいて答えないなんて
 無礼者ですよね。

 LARGE関数は使ったことがありませんでした
 ヘルプを読みつつ ?が頭の中いっぱいになりつつ
 条件付書式にしてみました。
 数式が =large($E$3:$E$51,48) としたら
 ネットスコアの列が全部・・・真っ赤になってしまいました。
 なにをやっても・・・ガックリ
 INAさん申し訳ありませんでした。
 (うり)

 そこまで深刻にならないでください。(^_^;)

 最初に
 >あと年齢も同じ時は?
 と質問したことが答えて貰えないと、条件判別することが出来ないのです。

 なので、考えられるすべての条件において、どのように処理するべきなのか。
 つまり仕様が決まらないことには、方法を考えることすら出来ないのです。

 私の場合、数式はほとんど使えないので、jun53さんが来てくれたことにより
 任せても良いかな〜と思ったという理由もあります。気にさせてごめんなさい。

 もし、数式で出来ないような内容になったら、マクロ(VBA)で作ってみます。

  (INA)

 うり さん、大丈夫ですよ、キット、INAさんの軽〜い イッツ ジョーク ですよ、多分。

 と、長々書いていたら、ほらね。

 >順位が小数点になってしまいました。
 は、F列範囲を全て選択して
 表示形式 〜 ユーザー定義 で  0  として下さい。

 ただ、このランクは F列の条件分岐(色分け)の為のランクですから
 正確なランクにはなりません。
 この条件で、1つの数式でのランク付けは私には無理みたいです。
 どうしてもランク付けが必要でしたら、G列挿入で F列のランクを付ける。
 =RANK(F3,F$3:F$5,1)
 ですかね?
 あまり、お役に立てずスミマセン。

 上記の説明もどきですが...
 RANK の中を見て頂ければわかると思います。

 COUNTIF(E$3:E$5,E3)=1,RANK(E3,E$3:E$5,1)
  同ネットスコアが無かったら(1つだけなら)ネットスコアのランクを。

 (RANK(E3,E$3:E$5,1)+RANK(B3,B$3:B$5,0)/2)
  同ネットが複数有ったら、ネットランクに年齢ランクを+して2で割る。
  なぜに、2で割るか、、ココは私にもよくわかってないんです。
  除算しないと条件分岐(色分け)がうまくできなかったんです。検証不足かもしれません。

 +C3/3)
  同ネット、同年齢が複数有ったらハンデを考慮する。
  なぜに、3で割るか、は前記と同じ理由です。

 お時間がありましたら、/2 , /3 をはずして試してみて下さい。
 これで OK なら数式が少しは短くなりますね。   (jun53)

 うりさん、今困惑していますか?ごめんなさい。
 サンプルを増やして検証してみたら、上記の式はどうもダメみたいですね。
 すみませーん、全文取り消しです。

 私も考えてみますが、
 INAさんのマクロを始め、他の皆様方
 ヘルプ ミー です、宜しくお願い致します。   (jun53)

 衝突しました。
 >50人くらい並んでいます。
を考えると /2→/100、/3→/100000ぐらいにした方が良いのと思います。
第三次基準(ハンデ順位)・第二次基準(年齢順位)が、
それぞれその上位の基準に対し影響を及ぼさないようにしないと
優先する基準の数値に加算され、最終的に判断する数値が、違ったものになります。
junさんの式をお借りすると
 =IF(COUNTIF(E$3:E$53,E3)=1,RANK(E3,E$3:E$53,1),(RANK(E3,E$3:E$53,1)+RANK(B3,B$3:B$53,0)/100)+C3/100000)
もしくは、最初から
=RANK(E3,E$3:E$53,1)+RANK(B3,B$3:B$53,0)/100)+C3/100000
にしてしまうとか。
因みに最初に思いついたのは、
=RANK(E3,E$3:E$102,1)*10000+RANK(B3,B$3:B$102,0)*100+RANK(C3,C$3:C$102,1)
です。参加者99人まで対応出来ます。
 30行で試した(sin)

 わ〜良かった、助け舟〜 今頃気が付きました。
 ジャンケンで言えば、わたくしは パー でしょか。
 うりさん、sinさんの式、試してみて下さいね。   (jun53)

 衝突しました。Yosh!です。
私が考えたのは、jun53さんの表でF3に =(E3*100000)+((200-B3)*100)+C3 でした。
sinさんの最後の案に近いみたいですね。(Yosh!)

 sinさんの 1番目と3番目うまく出来ました。
 2番目は?エラーが出てきました。何故?
 Yosh!さんのもうまく出来ました。
 後ろで眺めているだけの人も感動してくれてます。

 とっても満足の出来栄えですが よろしければ質問させてください。
 割ったり 掛けたりしている数字はどこから出て来ているのでしょう?

 物分りの悪い私です・・・宜しくお願いします。
 (うり)

 >ジャンケンで言えば、わたくしは パー でしょか。
思わず笑ってしまいました。 色んな所で回答されてお疲れだったのでしょう。
それにしても、よく洒落た言葉ポンポン出て来るものだと関心してます。←jun53レス探索委員より
うりさん ごめんなさい! 2番目の式には、閉じ括弧が変な所に紛れ込みました。正しくは、
=RANK(E3,E$3:E$53,1)+RANK(B3,B$3:B$53,0)/100+C3/100000
 >割ったり 掛けたりしている数字はどこから出て来ているのでしょう?
大局的な見地から簡潔な式を掲示していただいたYosh!さんの式が一番解りやすいので例にさせていただくと、
ネットが、99と100での場合、9900000と10000000となり、この下5桁(99や100に影響しない)の部分に
年齢条件を200より引くことで高年齢者ほど小さい数字となった3桁(101才以上は2桁)の数字に100を掛けて5桁にした数値を加算します。
同様にハンデ部分(100の位は影響を及ぼしますが、最終判断材料には影響ない。掛ける数字が100でなく10だと最終判断には影響します)を
加算すると、全体条件を満たした高成績ほど小さい数値が出来上がります。
その数値を条件付書式のSMALL関数やランク付けのRANK関数で読み込んであげます。
以上の考え方を整数で行うか小数点以下で行うかで掛けるのか割るのかが違った式になります。
こんな説明でご理解いただけますでしょうか?  説明下手な(sin)

 sinさんので解決かな?

 >それとネット、年齢、ハンデが同じときはジャンケンになるそうです。
 このジャンケンのときの処理をどうするかさえ分かれば、
 マクロでも簡単に作れそうなのですが・・・

  (INA)

 私は、午後出勤なもので
 返事が遅くなってすみません

 sinさん ご説明有難うございます。
 頭弱しの私にも理解することができました。
 背後にいる見物人の人たちも「う〜〜ん、なるほど」と感動・歓心してくれてます。

 INAさん ジャンケンの処理とは?
 もう1列設けて勝った人だけ○印付けるとか−1するとかしたら出来ますか?
 マクロは自動マクロでチャレンジしたことがありますが・・・
 当然のようにエラーが出て、黄色になったアルファベット達がいっぱいになり
 どうして良いのか解らず・・・以後試したことがなかったので・・・
 ご質問の意味が良く解らないのです。 すみません
 でも、とっても興味が(不謹慎?かもしれませんが)あります。
 こんなレベルの私でもよろしければ教えてください 宜しくお願いします。
 (うり)

 ちょっと思ったのですが、並べ替えするのはダメなのでしょうか?
 E列、B列と並び替えすれば、順位通りになると思うのですが・・・

  (INA)

 こんにちは。VBA の条件分岐が見たかったのですが、残念。

 ジャンケンしても、どうしてもランク付けがしたいのですね(笑)

 もう1列挿入もいいですが、1つの提案で
 名前の右端に [1字付け加える](スペースの有り、無し、どちらでも)
 例えば
 4 斉藤 J      等と。(J はジャンケンの J   単純?)
 これは勿論 丸印 でも 数字 でもいいです。数式を修正すれば済むことですから。

 Yosh!さんの式でしたら
 =IF(RIGHT(A3,1)="J",((E3*100000)+((200-B3)*100)+C3)-0.001,((E3*100000)+((200-B3)*100)+C3))

 sinさんの式でしたら
 =IF(RIGHT(A3,1)="J",(RANK(E3,E$3:E$53,1)+RANK(B3,B$3:B$53,0)/100+C3/100000)-0.0001,RANK(E3,E$3:E$53,1)+RANK(B3,B$3:B$53,0)/100+C3/100000)

 >もう1列設けて勝った人だけ○印付けるとか...
 でも、その列を参照させれば同じ事ですね。

 しかし、、、斉藤 J さんという人が本当にいたらどうしましょっ(笑)

 シングルプレーヤーが羨ましい!
 次回のゴルフコンペ、頑張って下さい。
 結果もお知らせしてくれると嬉しいですね。   (jun53)

 INAさん jun53さん ありがとうございます。

 A列の名前をずっとつかって第1回コンペ 第2回コンペと右に
 伸びていくものを作ってしまっているため
 B列の並べ替えは年齢順になるので大丈夫だとおもいますが
 E列は各コンペごとに変わってしまうのです
 的外れな答えになっているでしょうか? 

 ジャンケンの件ですが 
 今のところ したことは無かったそうですが
 もしそうなったら景品の差が大きいため順位は必要とのことでした。 (うり)

 ごめんなさい 最初に書いた表には第2回コンペのFの列に名前と書いてしまっていました。
 今頃気がついても遅いですよね・・・ すみません(うり)

 ひとまず作ってみました。
 EXCELファイルをサーバーにアップしておきましたので、
 ダウンロードして試してみて下さい。

http://camaro.ddo.jp/excel_vba/golf.xls

 ご希望どおりだと良いのですが・・・ 
  ( _ _ ).。oOグゥー・・・( ~o~)ハッ・・・( -_-)ネヨウ・・・  (INA)

 INAさん きゃぁ〜〜〜 す素晴らしいです。
 なんと言ってよいのか分からないくらい皆々異常テンションです。

 でも、お作りいただいたマクロを私の表に上手に貼り付けることが出来ませんでした。
 ボタンを作ったまでは良かったのですが、マクロ名はと問われ???
 自分の非力さを痛感中です。
 でぇ〜 INAさんの表に私の表を貼り付けさせていただきました。
 とっても快適に動いてくれてます。

 有難うございました。
 また困った時に図々しくお願いするかもしれませんが
 どうぞ宜しくお願いします。
 (うり+背後の観戦者)

 衝突しました。  うっ、↑このコメントの後には書きにくいけど、独り言と思って下さい。 

 うりさんのご希望に沿うかどうか分かりませんが、こんなレイアウトはどうでしょうか?
マクロは、門前の小僧を見る小僧なので列が長くなりますが・・・
1行目は、第○回コンペ を表示
2行目は、A列:参加人数、B列:名前、C列:年齢、D列:ハンデ、E列:スコア、F列:ネットスコア
     G列:便宜値、H列:暫定順位、I列:じゃんけん、J列:結果 と項目を入力
A3=1〜A101=99の連続データを作ります。 ウインド枠の固定を使えば、毎回の参加人数は、一目瞭然。
B〜F列は飛ばして、G3にはYosh!さんの式を使わせていただき、
 =IF(B3="","",(F3*100000)+((200-C3)*100)+D3)   でG101までコピー
H3は  =RANK(G3,$G$3:$G$101,1) および
     条件付き書式の設定で『数式が』 =COUNTIF($H3:$H$101,H3)>1  とし、書式を設定 これをH101までコピー
I列は、H列に表示されるじゃんけん対象者に対し『○』・『×』を入力
J3は  =IF(I3="",H3,IF(I3="○",H3,H3+1))  とし、既出のSMALL関数を使って書式設定
B1には、入力しなくて良いように  ="第"&JIS(INT((COLUMN()-1)/9+1))&"回コンペ"  ←おまけ(漢字ではありませんが・・・)
並べ替えを、タイトル行『暫定順位』で行えば、
H列に色の付く対象者がすぐに分かり、そのじゃんけん結果をI列に入力し、
『結果』で並べ替えすれば、最終結果全体が見やすいかと思います。
元に戻す場合は、タイトル行『参加人数』で行えば最初の状態に戻せます。
B:J列を選択しコピー→K列に貼り付けで繰り返せばそのまま使えます。
    余計なお世話 の (sin)  


 >とっても快適に動いてくれてます。
 どうやらご希望どおりの仕様だったようで良かったです。(^o^)

 テレビ見ながら半分寝ぼけて作ったので、検証不足なところがあるかもしれません。
 不具合があったときや、仕様変更などが必要になったときは、ご連絡下さい。

 メインの処理は、並べ替えしているだけの簡単なものです。
 勉強のために、どの行で何をしているか目をとおしておいて下さいね。
 何せ、ここは学校ですから・・(^^ゞ

  (INA)

 sinさん 独り言なんてとんでもない!!
 実際に試しながら うんうん へ?を繰り返しながら
 ようやく理解出来ました。
 いろいろな方法があるのだなぁ〜って
 いかに自分の作ったものが品疎でショボイ代物であったか・・・
 お恥ずかしい トホホ

 INAさん 
 スッゴク時間は掛かると思いますが勉強させていただきます。

 皆さん 有難うございました。  (うり)

 今さら ですが、一部書き込みを修正しました。
 >『○』・『×』(←×は無くても可)
 の(・・・)部分を消去しました。 ちょっと勘違いしてたもので (sin)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.