オーペナにっき!

パワプロのペナントモードについて書きます。

【パワプロ2022】名字生成プログラムで架空選手の登録名をリアルにしてみた【ExcelVBA】

0.目次


1.はじめに

ペナントモードのドラフトに登場する架空選手は、登録名の重複を防ぐため、出現時点でデータ上に既に存在する選手と同じ名字が割り振られないような仕様となっています。
また、出現割合も全ての名字で等しく設定されているらしく、「佐藤」や「鈴木」といったメジャーな名字を目にする機会は、現実に比べるとかなり少ないです。
加えて、今作から架空選手の名前が設定されなくなったため、実在選手と架空選手のリアリティの差はより一層広がりました。

今回は、そうした不満点を解消すべく筆者が作成したExcelVBAプログラムについて紹介します。
最終的には手動による登録名の変更が必要にはなりますが、多少の手間をかけてでも名前にリアリティを持たせたいという方も少なくないと思いますので、今回記事という形で公開することにしました。
少しでもみなさんのお役に立てば幸いです。


2.ファイルの詳細

ダウンロードは下記リンクからお願いします。
パスワードは「0702」です。

パワプロ名字生成.zip (パワプロ名字生成.zip) ダウンロード | オーペナにっき!のアップローダー | uploader.jp


Excelファイルの構成は、次のとおりです。


・シート「使い方」
使用方法についての簡単な説明。


・シート「(バージョン名)」
マクロの処理結果を出力するシート。各バージョン時点の実在選手の名字データをリスト化している。
通常の使用方法であればこのシート以外のシートを編集する必要はない。


・シート「音声」
パワプロ2022収録の日本人姓音声のうち、漢字変換時の名字がランキング全国上位10000位までに含まれるものについてリスト化している。
項目は①読み方、②漢字、③ヘボン式ローマ字(背ネーム入力時に使用)の3つ。
なお、ランキングのデータは名字由来net「全国名字ランキング」を参照している。


・シート「(全国および各都道府県名)」(非表示)
2022年3月時点における全国および各都道府県の名字ランキングの順位と内訳をリスト化している。
こちらもデータについては名字由来netを参照。

myoji-yurai.net


3.使い方

名字生成の手順は下記のとおりです。

  1. バージョン名シートを選択
  2. 年度、元の名字、出身都道府県、所属球団を入力
  3. Ctrl+Jを押下し、対象年を入力
  4. Ctrl+Mを押下


順を追って説明します。

  1. バージョン名シートを選択

各球団の実在選手が並んでいます。
前述のとおり、生成は全てこのシート上で行います。


  1. 年度、元の名字、出身都道府県、所属球団を入力

年度は選手の入団年を入力します。
元の名字は省略可能です。


  1. Ctrl+Jを押下し、対象年を入力

Ctrl+Jを押下後、このようなポップアップが表示されます。
今回は2022年入団のドラフト選手が対象なので、「2022」と入力します。


名字、読み方、背ネームが自動出力されます。
出力される名字は、各都道府県の人口比率に基づき、乱数によって選択されます。


  1. Ctrl+Mを押下

重複する登録名が自動出力されます。
あとは手順3と手順4によって出力されたデータをパワプロ2022上に反映させるだけなのですが、1年分でもかなりの作業量になるので、単純作業が苦手な方には苦行かもしれません。


4.VBAコード

プログラムの利用に直接関係はありませんが、一応作成したVBAコードも紹介しておきます。
大学の講義レベルの知識しか持たない筆者がプログラムを動かすことのみに注力して作成したコードになりますので、細かい点には目を瞑っていただけると幸いです...。


(1)Ctrl+J

Sub SeiYomi()

Dim ary() As Variant
Dim RowsNo() As Variant
DimAs Long
Dim 乱数 As Long

ary = Array()
RowsNo = Array()

'音声シートの漢字を格納
For k = 2 To Worksheets("音声").Cells(Rows.Count, 3).End(xlUp).Row
    myStr = Worksheets("音声").Cells(k, 3)
    Pref = Split(myStr, "、")
    For x = 0 To UBound(Pref)
        ReDim Preserve ary(UBound(ary) + 1)
        ary(UBound(ary)) = Pref(x)
        ReDim Preserve RowsNo(UBound(RowsNo) + 1)
        RowsNo(UBound(RowsNo)) = k '各要素の行番号を格納
    Next x
Next k

年 = InputBox("西暦XXXX年")
Randomize '乱数を初期化

'乱数により出身地から名字を指定
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    If InStr(Cells(i, 1),) > 0 Then '入力した年と等しいとき
        出身 = Cells(i, 3) '出身地を取得
        乱数 = Int((Worksheets(出身).Cells(4, 6) + 1) * Rnd)
        For j = 2 To Worksheets(出身).Cells(Rows.Count, 2).End(xlUp).Row
            If 乱数 <= Worksheets(出身).Cells(j, 4) Then
                Cells(i, 4) = Worksheets(出身).Cells(j, 2)
                For y = 0 To UBound(ary)
                    If Cells(i, 4) = ary(y) Then '格納した漢字と行番号から読み方と背ネームを指定
                        Cells(i, 5) = Worksheets("音声").Cells(RowsNo(y), 2)
                        Cells(i, 6) = Worksheets("音声").Cells(RowsNo(y), 4)
                        GoTo 1 '次のiへ
                    End If
                Next y
            End If
        Next j
    End If
1:
Next i

End Sub


(2)Ctrl+M

Sub DoSeiCheck()

For i = 2 To Cells(Rows.Count, 4).End(xlUp).Row
    Cells(i, 8).ClearContents
    For j = 2 To Cells(Rows.Count, 4).End(xlUp).Row
        If i = j Then 'i=jのとき処理をスキップ
        ElseIf Cells(i, 4) = Cells(j, 4) And Cells(i, 8) = "" Then
            Cells(i, 8) = Cells(j, 1) & Cells(j, 7)
        ElseIf Cells(i, 4) = Cells(j, 4) Then
            Cells(i, 8) = Cells(i, 8) & "、" & Cells(j, 1) & Cells(j, 7)
        End If
    Next j
Next i

End Sub



5.名前について

冒頭でも触れたとおり、今作から架空選手には名前が設定されなくなりました。今回紹介したプログラムは架空選手に名前がある前提で作成しているので、名前の生成については対応していません。プログラムにそういった機能を追加することも考えましたが、サンプル数が多く、かつデータの収集が容易であるサイトが見つからなかったので、今回は対応を見送りました。

代替案として、「すごい名前生成器」というサイトを紹介します。詳細は割愛しますが、筆者はこのサイトと今回紹介したプラグラムの合わせ技で、各選手のフルネーム化を行っています。

namegen.jp


6.最後に


導入のハードルは高いですが、作業量に対する見返りは十分にあると思いますので、興味を持たれた方はぜひダウンロードしてみてください。ちなみに筆者はもうこのプログラムなしのペナントには戻れません(笑)

それでは、最後までご覧いただきありがとうございました!