Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6996 / 13646 ツリー ←次へ | 前へ→

【41883】順位のつけ方 てんぱい 06/8/24(木) 22:26 質問[未読]
【41887】Re:順位のつけ方 Kein 06/8/24(木) 23:06 回答[未読]
【41891】Re:順位のつけ方 ichinose 06/8/25(金) 7:56 発言[未読]
【41894】Re:順位のつけ方 bykin 06/8/25(金) 12:49 発言[未読]
【41902】Re:順位のつけ方 ichinose 06/8/25(金) 17:59 発言[未読]
【41910】Re:順位のつけ方 ナイスプログラム 06/8/25(金) 22:10 回答[未読]

【41883】順位のつけ方
質問  てんぱい  - 06/8/24(木) 22:26 -

引用なし
パスワード
   ありがちなある試合結果の星取表があります。

  A     B   C   D   E   F   G    H I J    I
1 \    佐藤  鈴木  渡辺  山本  高橋  渡辺    成績     順位
2 佐藤   \   ×   △   ×   ○   ○   2勝2敗1分   
3 鈴木   ○   \   ×   ×   ×   ×   1勝4敗 
4 渡辺   △   ○   \   ×   ×   △   1勝2敗2分
5 山本   ○   ○   ○   \   △   ○   4勝  1分  
6 高橋   ×   ○   ○   △   \   ○   3勝1敗1分
7 渡辺   ×   ○   △   ×   ×   \   1勝3敗1分

各人の成績については関数で問題ないのですが、私を悩ませているのは順位について。
勝ち数が同じだった場合は負け数が少ない方が上位となるのを条件とした順位を表示したいのですが、その方法が分かりません。

  A     B   C   D   E   F   G    H I J    K
1 \    佐藤  鈴木  渡辺  山本  高橋  渡辺    成績     順位
2 佐藤   \   ×   △   ×   ○   ○   2勝2敗1分   3
3 鈴木   ○   \   ×   ×   ×   ×   1勝4敗     6
4 渡辺   △   ○   \   ×   ×   △   1勝2敗2分   4
5 山本   ○   ○   ○   \   △   ○   4勝  1分    1 
6 高橋   ×   ○   ○   △   \   ○   3勝1敗1分   2
7 渡辺   ×   ○   △   ×   ×   \   1勝3敗1分   5

手段は関数、マクロ等何でも構いません。どなたか教えてください。よろしくお願いします。

【41887】Re:順位のつけ方
回答  Kein  - 06/8/24(木) 23:06 -

引用なし
パスワード
   ちょっとその表の作り方ではうまくいかないので、H列以降の値は全てクリア
しておいて下さい。H:J列の表組みも含めて、一気にマクロでやってみます。
コードは以下のようになります。L列は作業列とします。

Sub MyLank()
  Dim LR As Long
 
  Application.ScreenUpdating = False
  Range("H1:L1").Value = _
  Array("勝ち", "負け", "引き分け", "順位", "行")
  LR = Range("A65536").End(xlUp).Row - 1
  With Range("H2:J2")
   .Formula = Array("=COUNTIF($B2:$G2,""○"")", _
   "=COUNTIF($B2:$G2,""×"")", "=COUNTIF($B2:$G2,""△"")")
   .AutoFill .Resize(LR), xlFillCopy
  End With
  With Range("H2").Resize(LR, 3)
   .Calculate
   .Value = .Value
  End With
  With Range("L2")
   .Value = 2
   .AutoFill .Resize(LR), xlLinearTrend
  End With
  Range("A1").CurrentRegion.Sort Key1:=Range("H1"), _
  Order1:=xlDescending, Key2:=Range("I1"), _
  Order2:=xlAscending, Header:=xlYes, Orientation:=xlSortColumns
  With Range("K2")
   .Value = 1
   .AutoFill .Resize(LR), xlLinearTrend
  End With
  Range("A1").CurrentRegion.Sort Key1:=Range("L1"), _
  Order1:=xlAscending, Header:=xlYes, Orientation:=xlSortColumns
  Range("L:L").ClearContents
  Application.ScreenUpdating = True
End Sub

【41891】Re:順位のつけ方
発言  ichinose  - 06/8/25(金) 7:56 -

引用なし
パスワード
   おはようございます。

>ありがちなある試合結果の星取表があります。
>
>  A     B   C   D   E   F   G    H I J    I
>1 \    佐藤  鈴木  渡辺  山本  高橋  渡辺    成績     順位
>2 佐藤   \   ×   △   ×   ○   ○   2勝2敗1分   
>3 鈴木   ○   \   ×   ×   ×   ×   1勝4敗 
>4 渡辺   △   ○   \   ×   ×   △   1勝2敗2分
>5 山本   ○   ○   ○   \   △   ○   4勝  1分  
>6 高橋   ×   ○   ○   △   \   ○   3勝1敗1分
>7 渡辺   ×   ○   △   ×   ×   \   1勝3敗1分
>
>各人の成績については関数で問題ないのですが、私を悩ませているのは順位について。
>勝ち数が同じだった場合は負け数が少ない方が上位となるのを条件とした順位を表示したいのですが、その方法が分かりません。
>
>  A     B   C   D   E   F   G    H I J    K
>1 \    佐藤  鈴木  渡辺  山本  高橋  渡辺    成績     順位
>2 佐藤   \   ×   △   ×   ○   ○   2勝2敗1分   3
>3 鈴木   ○   \   ×   ×   ×   ×   1勝4敗     6
>4 渡辺   △   ○   \   ×   ×   △   1勝2敗2分   4
>5 山本   ○   ○   ○   \   △   ○   4勝  1分    1 
>6 高橋   ×   ○   ○   △   \   ○   3勝1敗1分   2
>7 渡辺   ×   ○   △   ×   ×   \   1勝3敗1分   5
>
>手段は関数、マクロ等何でも構いません。どなたか教えてください。よろしくお願いします。

数式でもできそうですけどね!!

1.L列を作業列にして、
  セルL2に

=COUNTIF(D2:I2,"○")*COUNTA($D$1:$I$1)+COUNTA($D$1:$I$1)-COUNTIF(D2:I2,"×")

という数式を指定して、L7までフィル操作を行います。


2. セルK2に

=RANK(L2,$L$2:$L$7)

とし、KLまでフィル操作を行います。


これでK列に順位が表示されるはずですが・・・。

【41894】Re:順位のつけ方
発言  bykin  - 06/8/25(金) 12:49 -

引用なし
パスワード
   こんにちわ。

わても数式でええと思います。
ただ・・・ichinoseはん、間違ってまっせ(^^;;

>=COUNTIF(D2:I2,"○")*COUNTA($D$1:$I$1)+COUNTA($D$1:$I$1)-COUNTIF(D2:I2,"×")

  ↓

=COUNTIF(B2:G2,"○")*COUNTA($B$1:$G$1)+COUNTA($B$1:$G$1)-COUNTIF(B2:G2,"×")


せやけど、↓こんなんで十分なんとちゃいまっか?

=COUNTIF(B2:G2,"○")*1000-COUNTIF(B2:G2,"×")

要は重み付けができればええねんから・・・
ほな。

【41902】Re:順位のつけ方
発言  ichinose  - 06/8/25(金) 17:59 -

引用なし
パスワード
   ▼bykin さん:
こんばんは。

>
>わても数式でええと思います。
>ただ・・・ichinoseはん、間違ってまっせ(^^;;
>
>>=COUNTIF(D2:I2,"○")*COUNTA($D$1:$I$1)+COUNTA($D$1:$I$1)-COUNTIF(D2:I2,"×")
>
>  ↓
あらっ、セル範囲間違えてましたね!!(まったく気が付かなかった)

>
>=COUNTIF(B2:G2,"○")*COUNTA($B$1:$G$1)+COUNTA($B$1:$G$1)-COUNTIF(B2:G2,"×")
修正、ありがとうございます。


帰ってからこう↓修正しようと思っていました。

=COUNTIF(B2:G2,"○")*COUNTA($B$1:$G$1)-COUNTIF(B2:G2,"×")

>
>せやけど、↓こんなんで十分なんとちゃいまっか?
>
>=COUNTIF(B2:G2,"○")*1000-COUNTIF(B2:G2,"×")

ですね!!

【41910】Re:順位のつけ方
回答  ナイスプログラム WEB  - 06/8/25(金) 22:10 -

引用なし
パスワード
    今晩は。

 仮に、h,i,j列の勝、敗、分けが、それぞれ別のセルに書いてあるのなら、
一般機能で出来ると思います。

1.敗の列を昇順でソート
2.勝の列を降順でソート

これで順位で並ぶと思います。テストして見て下さい。

6996 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free