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
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【アイエムイーモード】プロパティを使用して日本語モードをオンにします。
定数 | 内容 |
---|---|
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を開く方法についての解説を終了します。
ありがとうございました。