• ベストアンサー

EXCELで星取表

EXCELで星取表を作り勝ち点の計算を自動化させたいと思っています。 今一番難しそうなのは、順位が変わった時に星取表がずれてしまいます。 具体的には  A B C D A * O O - B X * O X C X X * O D - O X * これでもしCが2位になった場合に単純にデータの並び替えを行うと  A B C D A * O O - C X X * O B X * O X D - O X * とおかしな星取表(自分同士の対戦*を斜めに一直線にしたい)になってしまいます。 これを補正するにはどのような方法があるでしょうか? 伝わったか不安ですが、アドバイスお願い致します。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

>縦方向にも勝ち点の欄を置くということですか? そういうことになります。 邪魔なら、行を非表示にしておいてもいいし、並べ替えをする時だけ、縦の勝ち点の列を行列入れ替えて、コピペしてもいいでしょう(コピペは、行方向の並べ替えをする前にして下さい)。

lh_kl
質問者

お礼

ありがとうございます。 無事出来たようです。 列の並び替え初めてやりました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

ソートだけで出来るものかどうか。 関数式では無理でしょう。 興味が出てVBAでやって見ました。(少数例でテスト済み) 既にある表(A1:G7)の下(A11:G17)のA列(A11:A17)に新順序のチーム(か選手)名を入力する。そして下記を実行する。 A1:G7の勝負を組替えました。 Dim d Sub test01() Dim cl As Range s = 10 '新しい表を作る開始行は11行から d = Range("a1").CurrentRegion.Rows.Count ' MsgBox d '----新縦チーム名順序を横にセット For i = s + 2 To s + 2 + d - 2 Cells(1 + s, i - s) = Cells(i, 1) Next i '-----自分自身と交差するセルに* For Each cl In Range(Cells(s + 2, 2), Cells(s + 2 + d - 2, 2 + d - 2)) ' MsgBox Cells(cl.Row, 1) & "=" & Cells(1 + s, cl.Column) If Cells(cl.Row, 1) = Cells(1 + s, cl.Column) Then cl = "*" End If Next '------元の表の勝敗を取ってくる For Each cl In Range(Cells(s + 2, 2), Cells(s + 2 + d - 2, 2 + d - 2)) If cl = "*" Then GoTo p01 r = Cells(cl.Row, 1): c = Cells(1 + s, cl.Column) cl = shoubu(r, c) p01: Next End Sub '---勝負を元の表(上部A2:G7から)取ってくる関数 Function shoubu(r, c) For i = 2 To d If Cells(i, 1) = r Then For j = 2 To 2 + d - 2 If Cells(1, j) = c Then shoubu = Cells(i, j) End If Next j End If Next i End Function

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 行方向(上下)に並べ替えて、さらに列方向(左右)に並べ替えればいいと思います。

lh_kl
質問者

補足

並び替えは勝ち点を優先してますが、縦方向にも勝ち点の欄を置くということですか?

関連するQ&A