この記事は
一生遊べる野球ゲーム 【ベストプレープロ野球】
をエクセルVBAでオリジナルリーグを作成するツールを作り、自分だけの世界を楽しんでもらえる参考になればと思い書いております。
すでに自作ツールで運用している方にも良い刺激になればと思っております。
前 回 まで
・野手シートと投手シートの選手名を自動で作成しました。
・リーグ運営の設定表作成(選手の能力・成長 決定)
・野手の初期パラメータ作成(16歳)
・野手のプロ入り後パラメータ作成(現在)
・投手の初期パラメータ作成(16歳)
・投手のプロ入り後パラメータ作成(現在)
・オリジナルリーグ 全12球団分の支配下登録後のデータ作成
⇓出来上がっているプログラム
前回で野手・投手の最終能力及び1軍・2軍の振り分けが終わりましたので
今回はベスプレ(ベストプレープロ野球)で読み込むデータを作成していきます。
開幕準備 の 流れ
まずは、選手名に空白がある場合はプログラムで全て”_”に置き換えました。
※ゲームではテキストファイルが読み込めずエラーが出ます
ベスプレ(ベストプレープロ野球)読み込みファイルを作成するにあたって
2軍は必要ないので、1軍選手のみのシートを作成します。
実際にベスプレ(ベストプレープロ野球)で使う1軍選手です。
まずは12球団各シートの1軍・2軍以外の選手を削除します。
↓不要な選手を削除するプログラムはこちら
Public Function 退団選手削除(ActiveSheetName As String)
Dim WName As Variant
Dim i As Byte
Dim Low As Byte
Dim Col As Byte
WName = Right(ActiveSheetName, 2)
If WName = “野手” Then
Col = 28
Else
Col = 20
End If
Low = 2
For Low = 2 To 139 Step 3
i = 1
‘退団選手を削除
If Cells(Low, Col – 4) = “退団” _
Or Cells(Low, Col – 4) = “外人” _
Or Cells(Low, Col – 4) = “新人” Then
‘各項目の削除
Do Until Col – i = 0
Cells(Low, Col – i) = “”
Cells(Low + 1, Col – i) = “”
Cells(Low + 2, Col – i) = “”
i = i + 1
Loop
End If
Next Low
End Function
↑ここまでです。
これで余計な選手は削除され大分見やすくなりました…
野手移動 選手の並び替え
今のままでは1軍・2軍選手が混在していて見にくいです。
なので、1軍選手は上の方へ、2軍選手は下の方へ並び替えます。
1人の選手に3行使っているので、エクセルの並び替えは使えません。
使うとエライことになって、やり直しになりますので絶対禁止です。
↓野手の並び替えをするプログラムを作成します。
Public Sub 野手移動()
Dim i As Byte
Dim j As Byte ‘選手数34名
Dim Low As Byte
Dim Col As Byte
Dim movlow As Byte
For i = 1 To 3
‘初期設定
Col = 28
Low = 101
For j = 1 To 34
‘1軍への移動
If Cells(Low, Col – 4) = “1軍” Then
movlow = 2
‘空いている行を探す
Do Until Cells(movlow, Col – 4) = “”
movlow = movlow + 3
Loop
If Low <> movlow Then
‘各項目の移動
If movlow < 102 Then
Call 選手移動(movlow, Low, Col)
End If
End If
ElseIf Cells(Low, Col – 4) = “2軍” Then
‘2軍への移動
movlow = 50
‘空いている行を探す
Do Until Cells(movlow, Col – 4) = “”
movlow = movlow + 3
Loop
If Low <> movlow Then
‘各項目の移動
If movlow < 102 Then
Call 選手移動(movlow, Low, Col)
End If
End If
End If
If Low > 3 Then
Low = Low – 3
End If
Next j
Next i
End Sub
↑ここまでです。
新人移動 新人を1軍・2軍に加入させます
野手の並び変えも終わり、大分見やすくなりました。
後は新人の配属ですが、空いている場所にほりこんでいきます。
⇓新人の移動のプログラムを作成
Public Function 新人移動(ActiveSheetName As String)
Dim WName As Variant
Dim i As Byte
Dim j As Byte ‘新人数5名
Dim Low As Byte
Dim Col As Byte
Dim movlow As Byte
WName = Right(ActiveSheetName, 2)
‘初期設定
If WName = “野手” Then
Col = 28
Low = 119
Else
Col = 20
Low = 125
End If
For j = 1 To 5
If WName = “野手” Then
‘新人の1軍選手の移動
If Cells(Low, Col – 4) = “1軍” Then
movlow = 2
Else
‘新人の2軍への移動
movlow = 50
End If
Else
‘新人の1軍への移動
If Cells(Low, Col – 4) = “先発” Then
movlow = 2
ElseIf Cells(Low, Col – 4) = “中継ぎ” Then
movlow = 20
ElseIf Cells(Low, Col – 4) = “抑え” Then
movlow = 32
Else
movlow = 38
End If
End If
If WName = “野手” Then
‘空いている行を探す
Do Until Cells(movlow, Col – 4) = “”
movlow = movlow + 3
Loop
‘各項目の移動
If movlow < 102 Then
Call 選手移動(movlow, Low, Col)
End If
Else
‘空いている行を探す
Do Until Cells(movlow, Col – 4) = “”
movlow = movlow + 3
Loop
‘各項目の移動
If movlow < 108 Then
Call 選手移動(movlow, Low, Col)
End If
End If
Low = Low + 3
Next j
End Function
↑ここまでです。
↓新人移動では、さらにサブルーチンを呼び出してますので、それも追加します。
Public Function 選手移動(movlow As Byte, Low As Byte, Col As Byte)
Dim i As Integer
‘各項目の移動
i = 0
Do Until Col – i = 0
‘3行分移動
Cells(movlow, Col – i) = Cells(Low, Col – i)
Cells(Low, Col – i) = “”
Cells(movlow + 1, Col – i) = Cells(Low + 1, Col – i)
Cells(Low + 1, Col – i) = “”
Cells(movlow + 2, Col – i) = Cells(Low + 2, Col – i)
Cells(Low + 2, Col – i) = “”
i = i + 1
Loop
End Function
↑ここまでです。
これで、野手の新人の配属が完了です。野手・投手共これらを使います。
投手陣の並び替え
野手を並び変えしましたが、投手の方が重要です。
先発・中継ぎ・抑え と役割分担がありますから…。
⇓投手の並び替えをするプログラムはこちら
Public Sub 投手陣並び替え()
Dim i As Byte
Dim j As Byte ‘選手数36名
Dim Low As Byte
Dim Col As Byte
Dim movlow As Byte
For i = 1 To 3
‘初期設定
Col = 20
Low = 107
For j = 1 To 36
‘先発への移動
If Cells(Low, Col – 4) = “先発” Then
movlow = 2
‘空いている行を探す
Do Until Cells(movlow, Col – 4) = “”
movlow = movlow + 3
Loop
If Low <> movlow Then
‘各項目の移動
If movlow < 18 Then
Call 選手移動(movlow, Low, Col)
End If
End If
ElseIf Cells(Low, Col – 4) = “中継ぎ” Then
‘2軍への移動
movlow = 20
‘空いている行を探す
Do Until Cells(movlow, Col – 4) = “”
movlow = movlow + 3
Loop
If Low <> movlow Then
‘各項目の移動
If movlow < 30 And movlow > 19 Then
Call 選手移動(movlow, Low, Col)
End If
End If
ElseIf Cells(Low, Col – 4) = “抑え” Then
‘2軍への移動
movlow = 32
‘空いている行を探す
Do Until Cells(movlow, Col – 4) = “”
movlow = movlow + 3
Loop
If Low <> movlow Then
‘各項目の移動
If movlow < 36 And movlow > 31 Then
Call 選手移動(movlow, Low, Col)
End If
End If
ElseIf Cells(Low, Col – 4) = “2軍” Then
‘2軍への移動
movlow = 38
‘空いている行を探す
Do Until Cells(movlow, Col – 4) = “”
movlow = movlow + 3
Loop
If Low <> movlow Then
‘各項目の移動
If movlow < 108 And movlow > 31 Then
Call 選手移動(movlow, Low, Col)
End If
End If
End If
If Low > 3 Then
Low = Low – 3
End If
Next j
Next i
End Sub
↑ここまでです。
開幕準備シート の 作成
これまでで、オリジナルリーグ(チーム)の野手・投手シートの並び替えは出来ました。
後は、1軍の選手のみを抽出していきます。
⇓開幕用シート ここに各チーム1軍選手のみを書きこんでいきます。
行と列の位置が重要です。
プログラムで書きこむ位置が決まっていますので。
Public Function 開幕(PBi As String, Ti As Byte)
‘定数
Const WriteSheet As String = “開幕用” ‘書きこみシート
Const SerBat As Byte = 24 ‘野手条件位置
Const SerPit As Byte = 16 ‘投手条件位置
‘変数
Dim L As Byte ‘0:野手ループ 1:投手ループ
Dim i As Integer ‘ショートループ
Dim j As Integer ‘書きこみループ
Dim WriteFrg As Boolean ‘書き込みフラグ
Dim VarTouroku As Variant ‘ベスプレ登録条件
Dim ReadSheet As String ‘読み込むシート名
Dim VarAtai As Variant ‘移動用の項目保管先
Dim Low As Single ‘読み込み行
Dim Col As Byte ‘読み込み列
Dim WLow As Integer ‘書きこみ行 先発:22 中継ぎ:28 抑え:32 各チーム開始位置35行間隔
Dim WCol As Integer ‘書きこみ列 セリーグ:0 パリーグ:20
‘野手と投手ループ処理
For L = 0 To 1
‘変数初期設定
Col = 2
Low = 2
j = 0
‘セリーグとパリーグでは 書きこむ列が違う為
If Ti <= 5 Then
WLow = Ti * 35 + 4
If L = 1 Then
WCol = 11
Else
WCol = 19
End If
Else
WLow = (Ti – 6) * 35 + 4
If L = 1 Then
WCol = 31
Else
WCol = 39
End If
End If
If L = 1 Then
WLow = WLow + 19
End If
Do Until 41 – j = 0
‘書きこみを初期化
WriteFrg = False
If L = 0 Then
‘読み込むシート名の設定
ReadSheet = PBi & “_野手”
‘読み込むシート参照
Sheets(ReadSheet).Activate
Col = 23
‘野手は34+5名なので…
If j = 38 Then
j = 40
End If
‘野手登録条件にマッチングするかチェック
If Len(Sheets(ReadSheet).Cells(Low, SerBat)) > 0 Then
VarTouroku = Sheets(ReadSheet).Cells(Low, SerBat)
If VarTouroku = “1軍” Then
WriteFrg = True
Else
WriteFrg = False
End If
End If
Else
‘読み込むシート名の設定
ReadSheet = PBi & “_投手”
‘読み込むシート参照
Sheets(ReadSheet).Activate
Col = 15
‘投手登録条件にマッチングするかチェック
If Len(Sheets(ReadSheet).Cells(Low, SerPit)) > 0 Then
VarTouroku = Sheets(ReadSheet).Cells(Low, SerPit)
Select Case VarTouroku
Case “先発”
WriteFrg = True
Case “中継ぎ”
WriteFrg = True
Case “抑え”
WriteFrg = True
Case Else
WriteFrg = False
End Select
End If
End If
‘ベスプレ登録条件に満たした場合
If WriteFrg = True Then
‘書きこみシート参照
Sheets(WriteSheet).Activate
‘各項目の移動
i = 0
Do Until Col – i = 0
‘開幕用シートに書き込み
If Col – i < 2 Or Col – i > 5 Then
‘読み込むシート参照
Sheets(ReadSheet).Activate
VarAtai = Sheets(ReadSheet).Cells(Low, Col – i)
‘書きこみシート参照
Sheets(WriteSheet).Activate
‘名前の書きこみ
If Col – i < 2 Then
If Ti < 6 Then
Sheets(WriteSheet).Cells(WLow, 1) = VarAtai
Else
Sheets(WriteSheet).Cells(WLow, 21) = VarAtai
End If
Else
Sheets(WriteSheet).Cells(WLow, WCol – i) = VarAtai
End If
End If
i = i + 1
Loop
WLow = WLow + 1
End If
Low = Low + 3
j = j + 1
Loop
Next L
Sheets(WriteSheet).Activate
End Function
↑ここまでです。
↓のプログラムをメインモジュールに作成。
Public Sub 開幕準備()
Dim i As Byte ‘ループ
Dim PBi As String ‘チーム
Dim OK_Order As String
MsgBox (“開幕オーダーを作成しています。一旦画面は消えますが、終了後再表示されますので、しばらくお待ちください。”)
Application.WindowState = xlMinimized
For i = 0 To 11
‘不要な選手を削除
Sheets(“リーグ情報”).Activate
PBi = Cells(3 + i, 4) & “_野手”
Sheets(PBi).Activate
‘野手処理
Call 退団選手削除(PBi)
Call 野手移動
Call 新人移動(PBi)
Sheets(“リーグ情報”).Activate
PBi = Cells(3 + i, 4) & “_投手”
Sheets(PBi).Activate
‘投手処理
Call 退団選手削除(PBi)
Call 投手陣並び替え
Call 新人移動(PBi)
Next i
For i = 0 To 11
Sheets(“リーグ情報”).Activate
PBi = Cells(3 + i, 4)
Call 開幕(PBi, i)
Next i
Application.WindowState = xlNormal
‘投手の投法 Ro、LoをR、Lに変換
Range(“B:B,V:V”).Select
Selection.Replace What:=”o”, Replacement:=””, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
MsgBox (“開幕準備が出来ました。テキストファイルを作成してベストプレープロ野球で読み込ませてください”)
End Sub
↑ここまでです。
リーグ情報 へ 開幕準備ボタンへの開幕準備の登録
最後にリーグ情報のボタンへ開幕準備プログラムをマクロ登録します。
⇓登録はボタンを右クリックで選択して行います。
これで終了。
時間がかかります。5分ぐらい
一度最小化してから終了後に
最大化で表示されます。
メッセージ付きです。
凄く不安になると思うけど
一息入れて待っててね。
画面を見せれないのは
見せた方が不安になるからなの…
開幕用シート が 戦力比較が出来て一番わかりやすい
ぶっちゃけ、各チームの情報の記事を書いてきましたが、
そのチームにのめりこまない限り、2軍選手やパラメータ・成長補正などは気になりません。
なので自チーム以外は開幕用シートさえ見てれば事足ります…。
この後のストーブリーグ(キャンプ)の記事に備えて筆者は一足先に開幕します。
ベストプレープロ野球を知りたい方は
ベストプレープロ野球 ソフトのお求めは⇓の画像から(Win,GBA,PS2)