HOME > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > ユーザーフォーム入門 - 住所入力フォームを作成する(6) 〜 ふりがなの取得

ユーザーフォーム入門 - 住所入力フォームを作成する(6) 〜 ふりがなの取得|Excel VBA

ユーザーフォーム関連のテクニック

ユーザーフォーム入門 - 住所入力フォームを作成する(6) 〜 ふりがなの取得

(Excel 2000/2002/2003/2007/2010/2016)

ユーザーフォーム入門 - 住所入力フォームを作成する(5) 〜 ワークシートへの転記」に続き、[会社名]テキストボックスに入力した値から、ふりがなの候補を取得する処理を作成していきます。

■ふりがなを取得するGetPhoneticメソッド

ふりがなの取得はApplicationオブジェクトのGetPhoneticメソッドを使用します。
GetPhoneticメソッドの引数に対象のテキストを指定すると、日本語のふりがなを返します。

Application.GetPhonetic(対象テキスト)

GetPhoneticメソッドの引数を指定したときに得られるのは、ふりがなの第一候補です。
ふりがなが期待通りに取得できなかったとき、引数を省略して再度呼び出すと、GetPhoneticメソッドは次の候補を返します。候補がないときは、長さ0の文字列("")を返します。

Application.GetPhonetic()

■自動で「会社名よみ」を入力する

[会社名]テキストボックス(txtKaisha)に入力して次のコントロールに移動したとき、[会社名よみ]テキストボックス(txtYomi)にふりがなの第一候補を自動入力する処理を作成しましょう。

テキストボックスから次のコントロールにフォーカスが移動するとき、テキストボックスにはExitイベントが発生します。ふりがなを取得する処理は、txtKaishaのExitイベントプロシージャに作成します。

これまでの操作と同様、フォームモジュールのオブジェクトボックスから"txtKaisha"を選択して、プロシージャボックスから"Exit"を選択すると、イベントプロシージャのひな型が挿入されます。ここに、次のコードを記述します。

'[会社名]テキストボックスから他へフォーカスが移ったときの処理
Private Sub txtKaisha_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim strTemp As String
    
    If txtKaisha.Value <> "" Then
        'ふりがなの第一候補を取得
        strTemp = Application.GetPhonetic(txtKaisha.Value)
        
        'ふりがなを半角文字に変換して[会社名よみ]テキストボックスへ格納
        txtYomi.Value = StrConv(strTemp, vbNarrow)
    End If
End Sub

■別のふりがな候補を取得する

最初に取得したふりがなが期待通りでなかった場合に、[読み]ボタン(cmdYomi)をクリックしたら、次のふりがな候補を取得する処理を作成しましょう。

メッセージボックスに候補を表示して、[はい]ボタンをクリックしたらふりがなを確定し、[いいえ]ボタンをクリックしたら次の候補を表示します。このとき、次のふりがな候補がない場合は、「次の候補はありません」とメッセージボックスに表示します。
表示したふりがな候補を確定するか、次の候補がなくなるか、または[キャンセル]ボタンをクリックするまでこの処理を繰り返します。

設計ウィンドウで、[読み]ボタンをダブルクリックするとcmdYomiのClickイベントプロシージャのひな形が作成されます。ここに、次のコードを記述します。

'[読み]ボタンクリック時の処理
Private Sub cmdYomi_Click()
    Dim Ret As Long
    Dim strPhonetic As String
    
    '会社名が入力されていない場合にはプロシージャを抜ける
    If txtKaisha.Value = "" Then Exit Sub
    
    'ふりがなの第一候補を取得
    strPhonetic = Application.GetPhonetic(txtKaisha.Value)
    
    Do
        '取得したふりがなの候補で確定するかどうかをメッセージボックスで確認
        Ret = MsgBox(strPhonetic & vbCrLf & vbCrLf & _
                        "確定しますか?", vbYesNoCancel)
        
        If Ret = vbYes Then
            '確定の場合には半角文字に変換してテキストボックスに格納
            txtYomi.Value = StrConv(strPhonetic, vbNarrow)
        ElseIf Ret = vbNo Then
            '[いいえ]ボタンを選択した場合は、次のふりがな候補を取得
            strPhonetic = Application.GetPhonetic()
            '次の候補がなければループをぬける
            If strPhonetic = "" Then
                MsgBox "次の候補はありません"
                Exit Do
            End If
        End If
        
    'ふりがな候補確定、またはキャンセルの場合は、ループを抜ける
    Loop While Ret = vbNo
End Sub

ここまで作成したら、ユーザーフォームを実行してみましょう。
複数の読み方のある会社名を入力し、ふりがなの自動入力を確認しましょう。ここでは、「狩野デザインオフィス」と入力してみます。

  1. [会社名]テキストボックスに「狩野デザインオフィス」と入力して[Enter]キーを押す
  2. [郵便番号]テキストボックスにフォーカスが移動し、[会社名よみ]テキストボックスに「カノウデザインオフィス」と半角で表示される
  3. [読み]ボタンをクリックする
  4. 第一候補の「カノウデザインオフィス」が表示されるので、[いいえ]ボタンをクリックする
  5. 次の候補として「カリノデザインオフィス」が表示される
  6. さらに[いいえ]ボタンをクリックする
  7. 次の候補として「カノデザインオフィス」が表示される
  8. [はい]ボタンをクリックすると確定し、[会社名よみ]テキストボックスに「カノデザインオフィス」が半角で表示される

「狩野デザインオフィス」のふりがな候補は3つです。そのため、Step8の操作で[いいえ]ボタンをクリックすると、「次の候補はありません」とメッセージボックスに表示されます。

次回からは、住所入力を支援する機能として、郵便番号から住所の一部を取得したり、住所から郵便番号を取得したりする処理を作成していきましょう。