1. はじめに
今回は、自分自身への備忘録を兼ねて、Excel VBA で 名前性別予測(GenderEstimate)をする方法を、お伝えしたいと思います
2. この記事を読んでできること
- Excel VBA で 名前性別予測(GenderEstimate)をすることができるようになる
3. 注意事項
- テスト用の名前データは、各自でご用意ください(今回テストで用いたデータは、ChatGPTにて生成した名前データを利用しています)
4. 必要なもの
- Windows OS PC(Windows11を想定)
- Microsoft Excel(ソフト版・・・VBAが動作するものをお使いください)
5. Excelファイルの新規作成
- Excelを起動し、任意の名前のExcelファイル(拡張子は必ず .xlsm )を作成する
- (例)名前性別予測ツール(GenderEstimate).xlsm
6. 「使い方」シートの作成
- サンプル画像を参考に、1つ目のシートに「使い方」シートを作成する
- 配置するコマンドボタンは、開発メニュー ⇒ 挿入 から「コマンドボタン(ActiveX コントロール)」を選択すること
- 「開発メニュー」が表示されていない場合は、事前にメニュー表示するようExcel設定の変更を済ませておくこと
7. 「分析データ」シートの作成
- サンプル画像を参考に、2つ目のシートに「分析データ」シートを作成する
- テスト用の名前データは、各自でご用意ください
- 必ず「No.」、「名(必須)」、「めい(必須)」の列に値を設定してください
- 「予想結果(ブランク)」の列は、未設定で結構です
8. 「標準モジュール」の作成
-
VBAを開き、「標準モジュール(Module1.bas)」を新規挿入する
-
「標準モジュール(Module1.bas)」に、参考文献に記載されている「GenderEstimate関数」を貼り付ける(1行目の関数目コメント以外、ソースプログラムの変更はおこなっていません)
-
「GenderEstimate関数」を貼り付ける際は、文字化けしないよう文字コード(SJISでの貼り付け)に気を付けてください
引数一覧
GenderEstimate(strMK As String, Optional strMF As String)
第1引数:名(漢字) …英語は自動的に無視しますが、中国語は一部反応してしまいます
第2引数:名(ふりがな) …カタカナも可
返り値:性別("男性" or "女性")
9. 「Sheets1(Sheet1.cls)」の作成
- VBAを開き、「Sheets1(Sheet1.cls)」の実行ボタンクリックイベント「Private Sub CommandButton1_Click()」にプログラムを貼り付ける
Sheet1.cls
' 実行ボタンクリック
Private Sub CommandButton1_Click()
' 変数宣言
Dim iRowStart As Integer ' 先頭行
Dim iRowCount As Integer ' 行数
Dim iRowEnd As Integer ' 最終行
Dim iColStart As Integer ' 先頭列
Dim iColCount As Integer ' 列数
Dim iColEnd As Integer ' 最終列
Dim iRowCurrent As Integer ' カレント行の番号
Dim strMK As String ' 名(漢字)
Dim strMF As String ' めい(ひらがな)
Dim sResultGender As String ' 予測結果性別
' 定数宣言
Const iSheetsNo As Integer = 2 ' 対象シートの番号
Const iColMK As Integer = 3 ' 名(漢字)の列番号
Const iColMF As Integer = 5 ' めい(ひらがな)の列番号
Const iColResultGender As Integer = 7 ' 予測結果性別の列番号
' 画面描画の一時停止
Application.ScreenUpdating = False
' デバッグログの出力
Debug.Print "START LOG:" & Format(Now, "yyyy/mm/dd hh:nn:ss")
' アクティブシートの移動
Sheets(iSheetsNo).Select
' アクティブシートの変更
Worksheets(iSheetsNo).Activate
' 行数の取得
iRowStart = ActiveSheet.UsedRange.Row
iRowCount = ActiveSheet.UsedRange.Rows.Count
iRowEnd = iRowCount + iRowStart - 1
iColStart = ActiveSheet.UsedRange.Column
iColCount = ActiveSheet.UsedRange.Columns.Count
iColEnd = iColCount + iColStart - 1
' デバッグログの出力
Debug.Print "iRowStart = " & iRowStart
Debug.Print "iRowCount = " & iRowCount
Debug.Print "iRowEnd = " & iRowEnd
Debug.Print "iColStart = " & iColStart
Debug.Print "iColCount = " & iColCount
Debug.Print "iColEnd = " & iColEnd
'2行目から最終行まで繰り返し
For iRowCurrent = 2 To iRowEnd
' 予測結果性別のクリア
sResultGender = ""
' 名(漢字)、めい(ひらがな)の取得
strMK = Worksheets(iSheetsNo).Cells(iRowCurrent, iColMK).Value
strMF = Worksheets(iSheetsNo).Cells(iRowCurrent, iColMF).Value
' 名前性別予測関数の呼び出し
sResultGender = GenderEstimate(strMK, strMF)
' デバッグログの出力
Debug.Print "No." & iRowCurrent - 1 & " " & strMK & "(" & strMF & ")は『" & sResultGender; "』かな?"
' 予測結果性別をセルに反映
Worksheets(iSheetsNo).Cells(iRowCurrent, iColResultGender).Value = sResultGender
Next
' 画面描画の再開
Application.ScreenUpdating = True
' デバッグログの出力
Debug.Print "END LOG:" & Format(Now, "yyyy/mm/dd hh:nn:ss")
Debug.Print "----------"
End Sub
10. Excelファイルを保存する
- 必ずExcelファイルを保存しましょう
- VBA実行時にエラーが発生すると、保存していなかった編集内容が消えることがあります
11. テスト実行
- Excelの「使い方」シートを開き、「実行」ボタンをクリックしてみましょう
- 作成に問題がなければ、自動的に「分析データ」シートが表示され、「予測結果(ブランク」の列に予測結果が表示されます
- 実行時のデバッグログは、VBAの「イミディエイト」ウィンドウに出力されていますので、デバッグ時にご参照ください
12. おわりに
いかがでしたでしょうか?Excel VBA で 名前性別予測(GenderEstimate)をすることができたのではないかと思います
今回の記事が、みなさまの学習の参考になれば幸いです
2023/03/04 TAKAHIRO NISHIZONO