• ベストアンサー

エクセルで耐久レース結果の集計、順位づけをするには

エクセル2002でサーキットでの耐久レース結果の集計、順位づけをリアルタイムで実行するにはどうすれば良いでしょう? サンプル 通過順カウント ゼッケン 1 35 2 64 3 89 4 48 5 85 6 8 7 30 8 71 9 2 10 21 11 10 12 64 13 35 14 89 15 85 16 48 17 8 18 30 19 71 20 2 21 21 22 10 23 64 24 35 25 89 26 85 27 48 28 8 29 30 30 2 31 71 32 10 33 21 34 64 35 35 36 89 37 48 38 8 39 85 40 30 41 2 42 10 43 21 44 71 45 64 46 35 47 89 48 8 49 85 50 48 51 30 52 2 53 10 54 21 55 71 56 64 57 35 58 89 59 8 60 48 61 85 62 30 63 2 64 10 65 21 66 64 67 71 68 35 69 89 70 8 71 48 72 85 73 30 74 2 75 10 76 64 77 21 78 71 79 35 80 89 81 8 82 48 83 85 84 30 85 64 86 2 87 10 88 21 89 71 90 35 91 89 92 8 93 48 94 64 95 30 96 85 97 2 98 10 99 21 100 35 101 71 102 89 103 8 104 48 105 64 106 30 107 85 108 2 109 10 110 21 欲しい結果 順位 ゼッケン 週回数 1   64    11 2   35    10 3   89    10 4   8    10 5   48    10 6   30    10 7   85    10 8   2    10 9   10    10 10   21    10 11   71    9 こんな感じです。 通過順のゼッケンを入力するたびに自動計算されその時点での周回数と順位が出るようにしたいのです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.6

修正したいのね #4と置き換えて 条件は同じ Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub If Not IsNumeric(Target.Value) Then Exit Sub Dim i As Long Dim ii As Long Range("F2", Range("H65536").End(xlUp)).ClearContents For i = 2 To Range("b65536").End(xlUp).Row For ii = 2 To Range("H65536").End(xlUp).Row + 1 If Cells(ii, 6).Value = Cells(i, 2).Value Or Cells(ii, 6).Value = "" Then Cells(ii, 6).Value = Cells(i, 2).Value Cells(ii, 7).Value = Cells(ii, 7).Value + 1 Cells(ii, 8).Value = Cells(i, 1).Value Exit For End If Next ii Next i Range("F2", Range("H65536").End(xlUp)).Sort Key1:=Range("G2"), Order1:=xlDescending, Key2:=Range("H2") _ , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin End Sub

qp-goo
質問者

お礼

ありがとうございます。 ほぼ思い通りに動いています。 修正してもすぐに計算しなおされてますね。

その他の回答 (6)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.7

No2です。まだ、空いていたのでおまけです。  A    B        C  D     スタート時間 ゼッケン タイム    周回数 と準備しておいて、C1にレースの開始時刻を入れておきます。 シートのコードには Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then GYOU = Range("A65536").End(xlUp).Row + 1 Cells(GYOU, 1).Value = Range("A1").Value Cells(GYOU, 2).Value = Time - Range("C1").Value Cells(GYOU, 3).Formula = "=COUNTIF(A3:A" & GYOU & ", A" & GYOU & ")" Cells(GYOU, 4).Formula = "=IF(COUNTIF(A" & (GYOU + 1) & ":A$65536,A" & GYOU & ")=0,C" & GYOU & "-B" & GYOU & ","""")" Range("A1").Activate End If End Sub をコピィしてみてください。 通過時に、A1セルにゼッケン番号をいれると、上から順にゼッケン番号とラップが入ります。 回数と順位を計算するC、D列は関数が入りますので、修正の場合は A列とB列を訂正してください。 順位を出す式は、空いている列に =INDEX(A:A,MATCH(LARGE(D:D,ROW(A1)),D:D,FALSE)) と入れて下へコピィしておいてください。 ゼッケンごとのラップタイムがでるので オートフィルターでゼッケンごとのタイムとか周回ごとの順位とかもすぐに表示できると思います。

qp-goo
質問者

お礼

ありがとうございます。しかし、データの集計に時刻の情報はないのです。 通過順序のみで判断しています。もちろんダミーの時刻を入れれば済む事なのですが知らない人がみたら紛らわしくなると思います。 それと、やはりマクロを使うと敷居が高くなり、後々の改良・修正の事や他の人が使うかもしれない事を考えると出来るだけ簡単なマクロかワークシート関数だけで処理出来る方が都合が良いのでもっとマクロを勉強してからチャレンジしてみたいと思います。 結局、通過順と周回数に重み付けしたものを判断基準にしてシートを完成させました。 みなさまのおかげで今回はワークシート関数だけで動くものを作れましたので終わりにしたいと思います。

noname#99913
noname#99913
回答No.5

No.1です。すみません。E列の式が間違っていました。次のようにしてください。 E2の式:=RANK(D2,D:D)

qp-goo
質問者

お礼

総合ポイント=周回数*10000-ポイント(通過順位の加算) という形で解決させました。 余りスマートとは言えないですが今は時間がないのでこれでやりたいと思います。 ありがとうございました。

qp-goo
質問者

補足

さっそくありがとうございます。 実は私もここで困っている訳ですが このポイントの使い方をすると順位が正しく出ません。 1.周回が多い方が順位が上 2.同じ周回ならポイントが少ない方が順位が上(通過順が早い) なんです それがうまくクリア出来れば問題なく出来るのですが・・・

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

マクロで良いなら 詳細が無いので、勝手に決めた 入力側 A列:通過順カウント(必ず連番で、少し多めに入れといて) B列:ゼッケン(半角数字で) 結果側 E列:順位 F列:ゼッケン G列:週回数 H列:通過順 A列、E列に連番を入力して、B列にゼッケンを入力するだけ '対象ワークシートモジュールへ Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub If Not IsNumeric(Target.Value) Then Exit Sub Dim i As Long i = 0 Do i = i + 1 If Cells(i, 6).Value = Target.Value Or Cells(i, 6).Value = "" Then Cells(i, 6).Value = Target.Value Cells(i, 7).Value = Cells(i, 7).Value + 1 Cells(i, 8).Value = Target.Offset(0, -1).Value Exit Do End If Loop Range("F2", Range("H65536").End(xlUp)).Sort Key1:=Range("G2"), Order1:=xlDescending, Key2:=Range("H2") _ , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin End Sub アレンジはご自分で マクロが分らなければ無視してください

qp-goo
質問者

お礼

ありがとうございます。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

No2です。  A     B    C    D   E  ゼッケン  通過時刻 回数 作業列 順位 ゼッケン 回数 1                   1 2                   2 3                   3 として Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 1 Then Target.Offset(0, 1).Value = Time Target.Offset(0, 2).Value = Target.Offset(0, 2).Value + 1 End If End Sub D列に =C2ーB2 下コピィにしておけば 手修正も可能では。 回数が同じ場合の順位を確定するためにはどうして時間の情報が必要ですす。

qp-goo
質問者

お礼

ありがとうございます。 修正案についてはよく理解出来ず手に負えません。 いろいろありがとうございました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

順位を決めるのに通過時間が必要ではないでしょうか?仮に  A     B    C    D   E  ゼッケン  作業列 順位 ゼッケン 回数 1            1 2            2 3            3 4 5 6 7 8 9 ・・・と準備しておきます。 シートの名前のタブを右クリックして、コードの表示をクリック VBエディターを開きます。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 1 Then Target.Offset(0, 1).Value = Int(Target.Offset(0, 1).Value) + 2 - Time End If End Sub をコピィして閉じます。 通過したときに、A列のゼッケン番号をダブルクリックすると、B列に妙な日付や時刻が入ります。 B列は、クリックした回数引く時間ですので、この値が大きいほうが順位で上になります。 ここの作業にはマクロを使用しますが、入力の作業を簡単に出来ます。 C列には、表示したい順位を数値で入れておきます。 D列には、=INDEX(A:A,MATCH(LARGE(B:B,C2),B:B,FALSE)) E列には、=INT(INDEX(B:B,MATCH(LARGE(B:B,C2),B:B,FALSE))) といれて下へコピイしておけば、順位に応じたゼッケン番号とそのゼッケンの回数が表示されると思います。

qp-goo
質問者

お礼

ありがとうございます。こんなやり方があるとは知りませんでした。 シンプルで結構感動ものの回答です。 概ね、やりたい事に沿ってはいるのですが、入力ミスの修正方法や操作ミスを防ぐ手段を講じないといけないなど私にはハードルが高すぎて満足なものを完成出来そうにありません。 もう少し理解しやすいやり方を探してみたいと思います。

noname#99913
noname#99913
回答No.1

サンプルがA列、B列にあるとして、次のように入力してください。 D             E            F      G ポイント         順位          ゼッケン  周回数 =SUMIF(B:B,F2,A:A) =SUMIF(B:B,F2,A:A) 2     =COUNTIF(B:B,F2)                             8                             10 (数式は下へコピー。ゼッケンは2~89まで) I    J                   K 順位 ゼッケン               周回数 1   =VLOOKUP(I2,E:G,2,FALSE)  =VLOOKUP(I2,E:G,3,FALSE) 2 3 (順位は1~11まで。数式は下へコピー)

qp-goo
質問者

お礼

お礼ではないのですが・・・ E列に順位が出ればその他は期待通りになるようです。 しかし、E列はD列と同じ数値が表示され順位が出ません。 何か間違ってますでしょうか?

qp-goo
質問者

補足

ありがとうございます。 コピペしてやってみてはいるのですがうまくいきません。 何か見落としてでもあるのでしょうか?引き続きやってみます。

関連するQ&A

  • 耐久レースの周回数について

    車及びバイクで耐久レースがありますが、どのようにしてオフィシャルは周回数を数えているのですか? 日中はゼッケンが見えますが、夜になると視界が悪くなるし、正確に数えるのが困難だと思うのですが・・・。

  • レース結果の集計について

    レース結果をエクセルを使って集計する事になりました。 データは次のように作成するのですが、最終的には各チームの上位3名の合計タイムを比べて、チームの順位を出さないといけません。 番号 名前 チーム名 タイム 1   ○○ ●●●● 25:01 2   △△ ▲▲▲▲ 26:13 3   □□ ●●●● 30:21 4   ◎◎ ●●●● 29:01 5   ◇◇ ▲▲▲▲ 22:45 6   ※※ ▲▲▲▲ 26:48 7   ○△ ▲▲▲▲ 30:21 8   ◇○ ■■■■ 21:47 9   ※◎ ■■■■ 19:37 10  □◇ ◎◎◎◎ 21:34  ・  ・     ・     ・  ・  ・     ・     ・  ・  ・     ・     ・ 並べ替えを使えばできるのですが、SUMIIFやRANK関数などを使って簡単にできる方法があれば教えてください。

  • EXCEL関数での順位のつけ方について

    今度レースの集計をすることになりました。 定められた時間の耐久レースで、タイムはありません。     A     B    C     D 1 チーム名 周回数 ゴール順 順位 2 ●●    30    1 3 ○○    31    4 4 △△    31    3 5 ■■    29    5 6 ★★    30    2 順位を決める条件は、 (1)周回数が多い順 (2)同一周回数の場合はゴール順 です。 周回数が違えばRANK関数で簡単にできるのですが、 同一周回数の時にゴール順を参照する方法がわかりません。 できれば、D列に関数を入れて順位を表示したいと考えています。 関数で解決できない場合はあきらめて手作業で行いますので、 VBAでの解決方法は結構です。 よろしくお願いします。

  • Yahoo検索結果の順位について

    Yahooの検索結果で"ページとの一致"という項目が ありますが順位付けはアクセス数が多い順でしょうか? 順位付けの基準を教えてください。

  • エクセルで順位付けする方法を教えて下さい

    エクセルで順位付けする方法を教えて下さい。 (A列)にクラス、(B列)に学籍番号、(C列)に得点が記載された1つの表があるとします。表にはクラス、学籍番号、得点、順に並んでいないところを、関数で順位付けしたいと考えています。表示結果として、クラス毎で得点の低い順に表示したいと考えています。 具体的には、 元々の表 (A列) (B列) (C列)  A組   8   57  B組   4   41  A組   6   42  C組   3   83  C組   6   73  B組   2   83 結果の表 (A列) (B列) (C列)  A組   6   42  A組   8   57  B組   4   41  B組   2   83  C組   6   73  C組   3   83 非常に煩雑な関数になりそうですが、お力をお貸しいただきたく宜しくお願いいたします。        

  • Excel 順位表

    サッカーのjリーグの結果のように,(1)勝ち点 (2)得失点 (3)総得点の順で順位付けをするリーグ戦があったとして,残り何勝で優勝するといったマジックナンバーを計算させることは可能でしょうか。一応,4チームで全12試合(ホーム&アウェイ)を考えています。

  • エクセルで順位表を並び替えたい。同順位表示方法は?

    エクセルで順位表を別シートに並び替えたいと考えていますが、同点になった場合はどうしたらよいでしょうか? シート1で集計した結果を参照し、シート2に上から順に1位から表示させる表を作りたいです。 試行錯誤の結果、下記まで作業しました。 ========= <シート1>     A        B       C           (1)商品名  (2)販売額  (3)ランキング  1    a     1000       2 2   b     1500      1 3  c     1000      2 4  d     500      4 5  e     300      5 (1)手入力 (2)SUM関数で集計した値 (3)RANK関数 <シート2>     A        B    C (3) ランキング  (1)商品名 (2)販売額 1 2 3 4 5 (3)手入力 (2)INDEXとMATCH関数 (3)INDEXとMATCH関数 ========= 1)シート2の(3)ランキングをシート1を参照し降順で自動表示させる方法を教えてください。 今は手入力なので、同順位があった場合にずれが生じてしまいます。 2)シート2に同順位表示のまま並び替えする方法を教えてください。 INDEX関数とMATCH関数を使っていましたが、 シート1で同順位表示されていた箇所が、シート2で表示できませんでした。 どうぞ宜しくお願いいたします。

  • 店舗名が2行にまたがり、性別が縦並びの集計結果シートである場合の集計方法

    各店舗ごとに、現在までの性別・年代別の登録者数をカウントするため、添付ファイルのように集計したいと考えています。最初はピボットテーブルで簡単に出来ると思っていたのですが、店舗名がある決められた順番(例では、わかりやすくA店、B店というような順になってますが…)で並んだ形でリスト化する必要があるのです。しかし、その決められた順番というものには規則性はないため、ピボットテーブルでやろうとすると店舗がE店、B店、D店…といった順番で並んでしまい、うまくA店、B店、C店といった順番にすることが出来ません。 かといって、別シートに店舗名だけ決まった店舗順にリストを用意し、これをピボットテーブルのデータと組み合わせてVLOOKUPを使おうとすると、今度は集計結果のシートに店舗名が2つの行にまたがっていて、その中に性別が男、女、男、女という順番で縦並びになっているため、うまく集計できず、いくつかの別シートにまたがって集計しなければなりません。 添付ファイルのように集計するためには、簡潔に集計する方法はないでしょうか? うまく伝えられていないと思うので、補足があればお伝えします。m(__)m

  • EXCEL VBA 集計結果を別ファイルに表示

    元データファイルに下記のような一覧があります。 この元データをもとに、新しく開いたファイルに集計結果の一覧を作成するマクロで悩んでいます。 (ずれていて見づらくてすいません。) <元データ> A B C D E 日付 都道府県名 区分1 区分2 内容 2008/6/22 北海道 ア あ あああ 2008/10/3 鹿児島 エ う ううう 2009/6/22 和歌山 イ え えええ 2010/6/22 千葉 ア う ううう 2011/1/20 大阪 イ お おおえ 2011/4/15 北海道 オ い いいい 2011/8/3 大阪 イ い いあい 上から日付順で並んでいるだけです。 これを都道府県名、区分2、月、内容を選択して、選択した条件を縦軸に横軸は常に区分1でカウントした結果を新しく開いたファイルのシートに下記のような一覧で表示します。 <集計結果> ◎都道府県別の場合 A B C D E 都道府県名 ア イ ウ エ オ 北海道 1 0 0 0 1 : 千葉 1 0 0 0 0 : 大阪 0 2 0 0 0 : 和歌山 0 1 0 0 0 : 鹿児島 0 0 0 1 0 ◎内容別の場合 A B C D E 内容 ア イ ウ エ オ あああ 1 0 0 0 0 いいい 0 0 0 0 1 ううう 1 0 0 1 0 えええ 0 1 0 0 0 おおえ 0 1 0 0 0 いあい 0 1 0 0 0 ※元データは日付以外はバラバラの順番です。その中から、例えば内容別の場合は全ての内容の種類分の個数(さらに区分1でわける)が必要になります。 ※内容や、都道府県の順番は一定の規則の元並べたいのですが、コード上でできなければ、[データ]-[並び替え]のオプションを使用しなければならないかなと思っております。(できればこれもコードに組み込めたらと思っています。) ※上記の集計後の一覧は日付を全て集計の対象にしていますが、実際は2008年~2010年や2009年のみといったように対象を絞って集計をする予定です。 考えれば考えるほどに複雑になってきて悩んでいるのですが、こういったことをするコードはvbaで可能でしょうか。またそれができるサンプルコードや方法、参考になるものがあったら教えてください。

  • 多人数のじゃんけんプログラム

    多人数でのじゃんけんプログラムを作成しています。 設定としては、 自分とコンピュータのじゃんけん大会 コンピュータの参加人数は最大で10人、 コンピュータの参加人数は自分で任意選択(1~10人)、誰か参加するかはランダム 出す手は、(自分の手→任意に選択)(コンピュータの手→参加者ごとにランダムで設定) 自分・コンピュータ(1~10)に固有の名前を与えてそれぞれの勝ち数をカウントする じゃんけん終了後、買った回数順に順位をつけて、1位から順に表示する。 ↑のようなプログラムを作成したいと思っております。 私が悩んでいる点は、じゃんけんの結果判定の方法と勝ち数ごとの順位付け・並び替えの方法です。(全部ですね・・・) 結果の判定方法は、 場に出ている手が2種類なら(勝ちか負け)、1種類・3種類なら(あいこ)とし、 2種類の場合には、出ている手と比較し勝敗判定を行う、 という形がいいのかなと思ってます(javaでどう書けばいいのかはわかりません--;) 並べ替えは、配列をうまく使えばいけるでしょうか? ネットやテキストなどで学習中ですが全体的にわからない点が多く、 考え方(結果判定・順位付け&並び替え)やソースサンプルなどお教えいただけると嬉しいです。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう