「フリガナ」の欄に、どのように入力してもらうか。

Excelで作られた帳票で頻繁に見かけるのが、このような書式。
f:id:Infoment:20190707183607p:plain

この「ヤマダタロウ」の部分について、どのような入力方法が良いか考えてみた。
f:id:Infoment:20190707184055p:plain

1.両方とも直接入力

最もよく見かけるパターン。でも、これだと面白くない。

2.フリガナの欄にPhonetic関数をセット

漢字を入力するだけで、フリガナの入力が完了する。
f:id:Infoment:20190707215602p:plain

これで済めばよいのだが、昨今は様々な当て字のお名前があるそうで。例えば「苺愛」と書いて「いちあ」さん。残念ながら、そのままでは正しく変換されない。
f:id:Infoment:20190707220225p:plain

かといって、「苺」「愛」を個別に入力すると、フリガナが正しく表示されない問題が残ってしまう。
f:id:Infoment:20190707220332p:plain

3.ユーザーフォームで入力

ということで、マクロでの解決を試みる。今回はユーザーフォームを用いて、漢字と平仮名の両方を入力する。
まずは、フォームのデザインから。
f:id:Infoment:20190707221318p:plain

氏名とフリガナを入力するだけの、シンプルな作りとした。

ユーザーフォーム(NameInputForm)

① 名前を入力するセルを、フォームの初期化時に設定する。
今回は、セル「B2」とした。

Dim NameRange As Range
Private Sub UserForm_Initialize()
    Set NameRange = Range("B2")
End Sub

なおフリガナは、ワークシート側のPhonetic関数で表示させるものとする。

② テキストボックスの入力状況を確認する。

Private Property Get CheckBlank() As Boolean
    Dim Control As Msforms.Control
        For Each Control In Me.Controls
            If TypeName(Control) = "TextBox" Then
                If Control.Object.Value = vbNullString Then
                    CheckBlank = False
                    Exit Property
                End If
            End If
        Next
        CheckBlank = True
End Property

一つでも空のテキストボックスがあれば、Falseを返す。全てのテキストボックスに何某かが入力されている場合のみ、Trueが返る。

③ 入力ボタンの設定。
名前入力用のセルに、名前とフリガナをセットする。なお、ふりがなのセットに関しては、前回作成した「AddPhonetic関数」を使用する。

Private Sub InputCommandButton_Click()
    If CheckBlank Then
        NameRange = NameTextBox ' 氏名入力用テキストボックス
        AddPhonetic NameRange, _
                    FuriganaTextBox ' フリガナ入力用テキストボックス
        Unload Me
    End If
End Sub
Sub AddPhonetic(target_range As Range, kana_to_add As String)
    target_range.Characters.PhoneticCharacters = kana_to_add
End Sub
動作確認

それでは早速、「山田苺愛」さんの名前を入力してみよう。
f:id:Infoment:20190707223328g:plain

どうやら、上手くいったようだ。
ただしこのままでは、とても使い勝手が悪い。
そこで明日は、その辺りを調整してみるとしよう。

という訳で、明日に続きます。

参考まで。