LoginSignup
0
0

More than 1 year has passed since last update.

Excel VBA で 名前性別予測(GenderEstimate)をする方法

Last updated at Posted at 2023-03-04

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設定の変更を済ませておくこと

image.png

image.png

7. 「分析データ」シートの作成

  • サンプル画像を参考に、2つ目のシートに「分析データ」シートを作成する
  • テスト用の名前データは、各自でご用意ください
  • 必ず「No.」、「名(必須)」、「めい(必須)」の列に値を設定してください
  • 「予想結果(ブランク)」の列は、未設定で結構です

image.png

8. 「標準モジュール」の作成

  • VBAを開き、「標準モジュール(Module1.bas)」を新規挿入する

  • 「標準モジュール(Module1.bas)」に、参考文献に記載されている「GenderEstimate関数」を貼り付ける(1行目の関数目コメント以外、ソースプログラムの変更はおこなっていません)

  • 「GenderEstimate関数」を貼り付ける際は、文字化けしないよう文字コード(SJISでの貼り付け)に気を付けてください

  • 参考文献:VBAマクロ向け関数。GenderEstimate。漢字の名前とふりがなから、性別を推定する関数

image.png

引数一覧
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

image.png

10. Excelファイルを保存する

  • 必ずExcelファイルを保存しましょう
  • VBA実行時にエラーが発生すると、保存していなかった編集内容が消えることがあります

11. テスト実行

  • Excelの「使い方」シートを開き、「実行」ボタンをクリックしてみましょう
  • 作成に問題がなければ、自動的に「分析データ」シートが表示され、「予測結果(ブランク」の列に予測結果が表示されます
  • 実行時のデバッグログは、VBAの「イミディエイト」ウィンドウに出力されていますので、デバッグ時にご参照ください

image.png

image.png


12. おわりに

いかがでしたでしょうか?Excel VBA で 名前性別予測(GenderEstimate)をすることができたのではないかと思います
今回の記事が、みなさまの学習の参考になれば幸いです

2023/03/04 TAKAHIRO NISHIZONO


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0