Sub 相対的に値を設定() '名前のリストの数 Const NameListNumber As Integer = 10 '対戦表の名前ごとのセル数 Const CellHeightNumberFromCellToCell As Integer = 3 '対戦表の左列から右列までのセル数 Const CellWidthNumberFromLeftSideToRightSide As Integer = 5 '対戦表のほかの対戦表とのセル数 Const CellWidthNumberFromListToList As Integer = 2 '一番下まで描画したときの、次の表までの高さ Const NextListHeight = -CellHeightNumberFromCellToCell * NameListNumber / 2 '行あたりのセルの数 Const CellHeightNumber = NameListNumber / 2 '名前のリストの数分の文字列配列の作成 Dim NameList(NameListNumber) As String 'ここで名前を代入しておく NameList(0) = "0" NameList(1) = "1" NameList(2) = "2" NameList(3) = "3" NameList(4) = "4" NameList(5) = "5" NameList(6) = "6" NameList(7) = "7" NameList(8) = "8" NameList(9) = "無し" Dim NameCount As Integer '配列の0の人を固定にして、ほかの人をひとずつずらして、全通りを表現するとする '名前のリストの数 - 2が試合表の数になる For ListNumber = 0 To NameListNumber - 2 Step 1 NameCount = 0 '対戦表の右の人と、左の人に分離させる For LineNumber = 0 To 1 Step 1 For SellCount = 0 To CellHeightNumber - 1 Step 1 ActiveCell.FormulaR1C1 = NameList(NameCount) ActiveCell.Offset(CellHeightNumberFromCellToCell, 0).Select NameCount = NameCount + 1 Next '左側の列の場合、次のセルに処理を渡してやる If LineNumber = 0 Then ActiveCell.Offset(NextListHeight, CellWidthNumberFromLeftSideToRightSide).Select End If '右側の場合、次の対戦表を作成するために、そちらへセルを渡してやる If LineNumber = 1 Then ActiveCell.Offset(NextListHeight, CellWidthNumberFromListToList).Select End If Next Dim TempLastName As String Dim LoopCount As Integer 'Gotoの関係上、面倒なので、先に-1しておく LoopCount = -1 '配列の1の人を最後に移動させて、それ以外は一つ前にずらす For Each Count In NameList LoopCount = LoopCount + 1 '先頭は基準となるので、除外 If LoopCount = 0 Then GoTo FOR_END End If '次の人を一時的に変数保持 If LoopCount = 1 Then TempLastName = NameList(1) GoTo FOR_END End If '最後になったら、一時保持した人を最後に代入 If LoopCount = NameListNumber Then NameList(LoopCount) = TempLastName End If '一人前にずらす NameList(LoopCount - 1) = NameList(LoopCount) FOR_END: Next Next End Sub