Excel VBA 日本語入力(IME)をオンにしてInputBoxを開く

スポンサーリンク
スポンサーリンク

IMEをオンにしてInputBoxを開く方法

InputBox関数を使用すると、ユーザーからデータを文字列として受け取れます。名前などの日本語のデータを受け取るときに、日本語変換ソフト(IME)を自動でオンの状態になると切り替えの手間がなく、ユーザーに親切な設計になります。しかし、InputBox関数には、IMEを制御する機能はありません。

そこで、新しいブックを開き、アクティブセルに「IMEを自動でオンにする」という「入力規則」を設定します。

設定段階でIMEがオンになるので、そのあとにInputBoxを開くことで、切り替えることなく日本語が入力できます。新たに開いたブックはInputBoxの入力が終了して確定した時点で保存しないで閉じます。

IMEをオンにしてInputBoxを開くコード

Sub imeon()
Dim 名前 As String
戻る:
With Workbooks.Add
With ActiveCell.Validation
   .Add Type:=xlValidateInputOnly
   .IMEMode = xlIMEModeOn
End With
名前 = InputBox("名前を入力してください。")
   .Close SaveChanges:=False
End With
If 名前 <> "" Then
  MsgBox 名前
Else
  MsgBox "名前が未入力です。この項目はキャンセルできません。"
 GoTo 戻る
End If
End Sub

コードの解説

2行目【 Dim 名前 As String 】
InputBox【インプットボックス】関数から受け取ったデータを格納する変数「名前」を文字列型(String)で宣言です。


3行目【 戻る: 】

InputBox【インプットボックス】関数から受け取ったデータが格納されている変数「名前」のデータが空の場合、つまり、InputBox【インプットボックス】に値が未入力もしくは、キャンセルボタンが押された場合に16行目のGoTo【ゴウトゥ】ステートメントで処理が戻る位置を表す「戻る:」ラベルです。


4行目【 With Workbooks.Add 】
IMEオンの入力規則を設定するブックをWorkbook【ワークブック】オブジェクトのAdd【アド】メソッドで追加して、With【ウィズ】ステートメントで指定します。


5行目【 With ActiveCell.Validation 】

4行目で追加したブックはアクティブブックになっているので、追加したブックのシートのセルにValidation【バリデーション】プロパティを使用して入力規則を表すValidation【バリティーション】オブジェクトを呼び出し、With【ウィズ】ステートメントで指定します。


6行目【 .Add Type:=xlValidateInputOnly 】
With【ウィス】ステートメントで指定したValidation【バリディーション】オブジェクトのAdd【アド】メソッドを使用してアクティブセルに入力規則を追加します。Add【アド】メソッドの入力規則の種類を表す引数Type【タイプ】には「すべての値」を表すxlValidateInputOnly【インプットオンリー】を設定します。


7行目【 .IMEMode = xlIMEModeOn 】
With【ウィズ】ステートメントで指定したValidation【バリデーション】オブジェクトのIMEMode【アイエムイーモード】プロパティを使用して日本語モードをオンにします。

IMEMode【アイエムイーモード】プロパティの設定値一覧
定数内容
xlIMEModeAlpha半角英数字
xlIMEModeAlphaFull全角英数字
xlIMEModeDisable無効
xlIMEModeHiraganaひらがな
xlIMEModeKatakanaカタカナ
xlIMEModeKatakanaHalfカタカナ (半角)
xlIMEModeNoControlコントロールなし
xlIMEModeOffオフ (英語モード)
xlIMEModeOnオン(日本語モード)

9行目【 名前 = InputBox(“名前を入力してください。”) 】
InputBox【インプットボックス】関数を使用してユーザーからデータを受け取り、変数「名前」に代入します。


10行目【 .Close SaveChanges:=False 】
4行目のWith【ウィズ】ステートメントで指定した、追加したブックをWorkbook【ワークブック】オブジェクトのClose【クローズ】メソッドを使用して、ブックの変更を保存するかしないかを設定する引数SaveChanges【セーブチャンジズ】にFalseを設定してブックを保存しないで閉じます。


12行目【 If 名前 <> “” Then 】
If【イフ】ステートメントを使用して変数「名前」に格納されている値が空ではないときを定義します。


13行目【 MsgBox 名前 】
条件分岐の条件が成立したとき、つまり変数「名前」の値が空ではないときMsgBox【メソッセージボックス】関数で変数「名前」に格納されている値を表示します。


14行目【 Else 】

Else【エルズ】ステートメントを使用して条件が成立しない場合、つまり変数「名前」に格納された値が長さ0文字の文字列(空)の場合に以下15行目の処理を実行します。


15行目【 MsgBox “名前が未入力です。この項目はキャンセルできません。” 】
変数「名前」の値が空だった場合、MsgBoX【メッセージボックス】関数でメッセージを表示します。


16行目【 GoTo 戻る 】
変数「名前」の値が空だった場合、GoTo【ゴウトゥ】ステートメントで3行目の(戻る:】ラベルまで処理を戻します。


以上で、IMEをオンにしてInputBoxを開く方法についての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク