※当ブログでは商品・サービスのリンク先にプロモーションを含むものがありますのでご了承ください

KeyAscii活用でExcelユーザーフォームに数字入力限定[マイナス入力は種類と文字色の条件設定]

今回の記事では

ExcelのVBAでユーザーフォームを使って金額を入力させているんだけどテキストボックスに数字だけ入力させる方法って無いの?

数字以外のキーを押したとしても入力させないように制限できたら便利なのに

数字だけ入力出来るようになったのは良いんだけどマイナスの数字(金額)が入力出来ない

マイナスの数字を入力したり、マイナスの数字が入力されたら赤字で表示出来るようにさせるにはどうしたら良いの?

こういった疑問に答えます

✔Excelユーザーフォームで制限付きのテキストボックスにマイナスの数字を入力する方法のテーマ

①「KeyAscii」を活用すればユーザーフォームのテキストボックスに数字だけ入力させることが出来ます

②入力制限したテキストボックスにマイナスを入力させるには入力内容と文字色の条件設定で実現可能

この記事を書いているのはOfficeを約20年間活用しながら

ITを活用したエステの経営マネジメントしている私の経験を基に

MicrosoftOfficeに関して実体験に基づいて解説しています

今回の内容を一緒にやりたい場合は▼のファイルをダウンロードして下さい

「KeyAscii」を活用すればユーザーフォームのテキストボックスに数字だけ入力させることが出来ます

ユーザーフォームのテキストボックスに数字だけ入力させるには「KeyAscii」を活用すれば実現出来ます

なぜなら、「KeyAscii」は入力された文字の種類を判定出来るので入力を制限することが出来るからです

今回は、VBAで作ったユーザーフォームのテキストボックスに入力出来る文字列の種類を「数字だけ」に限定する方法と「マイナスの数字を入力して赤字で表示する方法」をセットにして解説します

設定ができるとこんな風にテキストボックスにマイナスの金額の数字(赤文字)を入力することが出来ます

この方法は記事の執筆時点でなかなか検索結果に出てこないのでやり方を覚えておくと便利ですよ

ただし、転記などの問題は無いですが、テキストボックスの表示が「¥ーではなくー¥」と表示されてしまいます

まずは、テキストボックスに入力した時に数字(金額)のみ入力出来るように限定する方法を見てみましょう

Private Sub MoneyBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    '数字の入力だけ許可する
    If Chr(KeyAscii) = "-" Then MoneyBox.Value = "-"
    If Not Chr(KeyAscii) Like "[0-9]" Then KeyAscii = 0

    MoneyBox.Value = Format(MoneyBox.Value, "\\#,##0")
    'マイナスの数字の場合に赤い文字色に表示する
    If MoneyBox.Value < 0 Then
        MoneyBox.ForeColor = RGB(255, 0, 0)
    Else
        MoneyBox.ForeColor = RGB(0, 0, 0)
    End If

End Sub

数字だけの入力に制限するなら5行目だけでOKです

また、今回の機能に必要な部分はこれだけです

このコードを「KeyPressプロシージャ」に入力することで実現しています

今回の「Private Sub MoneyBox_KeyPress」というプロシージャは、MoneyBoxというテキストボックスで「キーが押されたら」書いてある処理を実行してね

という意味になります

ポイント

数字だけの入力に限定する前にマイナス「-」の入力判定させていますが、
先にマイナスの入力だけ許可しないとマイナスが入力出来ないので順番には注意して下さい

ここで今回の全体的な仕組みを整理しておきましょう

今回はシンプルに登録ボタンをクリックするとフォームが表示されます

フォームの各項目に入力された文字列は「登録」ボタンを押すことでそれぞれのセルに転記されます

フォームの表示や転記についての解説は省略させてもらいますね

今回は主に金額のテキストボックスに色々な制限を上手く設定する方法になります

ユーザーフォームの設定をしていこう

では、フォームの設定などをしていきましょう

まず、金額のテキストボックスの名前には「MoneyBox」という名前を付けています

また、「MoneyBox」をクリックして「プロパティ」のIMEModeの一覧から「2-fmIMEModeOff」を選びましょう

これで、金額のテキストボックスを入力する時にIMEが勝手に「半角英数入力モード」に切り替わってくれます

続いて「MoneyBox」をダブルクリックしましょう

自動でChangeイベントが入力されますが、今回は必要無いので削除して下さい

改めてオブジェクトの一覧をクリック「MoneyBox」をクリック

続いて右側のイベント一覧のリストをクリック

一覧から「KeyPress」をクリック

これでした準備が完成です

ココまでは慣れてしまえば簡単ですよ

実は今回のポイントはKeyPressプロシージャの「KeyAscii」の部分です

この「KeyAsciiの値を判定する」ことで数字だけという判断が出来たりマイナスの入力を許可することが出来るのでココだけは押さえておきましょう

数字だけを入力させる仕組みを理解して制限してみよう

では、いよいよ数字だけの入力に限定してみましょう

Private Sub MoneyBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    '数字の入力だけ許可する
    If Not Chr(KeyAscii) Like "[0-9]" Then KeyAscii = 0

End Sub

これだけで数字のみに限定できます

数字が入力されているかどうかは、「IF~Then」の部分で判断していますね

「もし〇〇だったら✕✕という処理をしてね」これだけです

次の「Not」は「~ではない」という意味です

次の「Chr(KeyAscii)」の部分が重要で「KeyAscii」で何が入力されたのか?

を判断しています「ChrはVBAの関数」で「文字コードを文字に変換」してくれる関数です

文字コードとは簡単に言うと「0」を入力したら「48番」だよといった具合に数字や文字に対して連番を振って管理する仕組みのことです

ちなみに「0→48・1→49・2→50・3→51・4→52・5→53・6→54・7→55・8→56・9→57」といった具合です

Asciiコードのまま判断もできますが、アスキーコードを数字に戻した方が分かりやすいですよね

だから、Chr関数を使って「0~9」の数字が押されたかを分かりやすくしてるという訳です

「Like演算子」は「”[0-9]”」とセットで「Chr(KeyAscii)」の結果が「”[0-9]”」つまり「0~9」までの数字と一致するか? を判断しています

Likeは「=」や「-」などの比較演算子の仲間なので「Chr(KeyAscii)」が「0~9」と検索して一致しているかを判断することが出来ます

要は押されたキーが数字なのかどうかをココで判断している訳ですね

ココまでをまとめると

「If Not Chr(KeyAscii) Like “[0-9]” Then」の部分を日本語にすると「押されたキーが「0~9」の間の数字でなければ」という条件の設定になる訳です

入力されたキーが数字じゃなかったら、IF関数の結果が反映されます

それが「KeyAscii = 0」の部分ですね

KeyAsciiに「0」を設定することでキー入力を無効にしています

私もアスキーコードに詳しくは無いので正確では無いのですが、Asciiコードの「0」には何も設定されていないのでキー入力が無効化されるようです

このあたりは、そういうものだと思っておけばOKですよ

1行で数字だけ入力を許可できるコードなので、試しに今のコードだけ設定して金額のテキストボックスに適当に入力すると数字だけ入力できるので結構楽しいのでやってみて下さい

繰り返しになりますが、ユーザーフォームのテキストボックスに数字だけ入力させるには「KeyAscii」を活用すれば実現出来ます

入力制限したテキストボックスにマイナスを入力させるには入力内容と文字色の条件設定で実現可能

入力制限したテキストボックスにマイナスを入力したいなら、入力内容の判別と文字色の設定をすれば実現出来ます

なぜなら、マイナスの記号を判別して文字色を設定することで入力制限をしたテキストボックスでもちゃんとマイナスの数字を入力することが出来るからです

次は数字しか入力出来ないテキストボックスにマイナスの数字を入力する方法について見てみましょう

仕事をしていると、マイナスの金額を入力しないといけないシーンってありますよね

例えば、カードの金額を間違って入力してしまったとか、一度切ったカードの決済を切り直す必要があったり、解約などでマイナスの金額だけ入力するしか無いようなパターンです

ただ、実は今の設定のままだとこのマイナスの金額を入力することが出来ないんですね

なぜなら、「If Not Chr(KeyAscii) Like “[0-9]” Then KeyAscii = 0」で数字以外の入力を制限しているからです

「ー(マイナス)」は数字ではないので入力させてもらえないことになります

これだと、実務では困ってしまう訳です

そこで今のコードをちょっと変更して工夫してみましょう

Private Sub MoneyBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    '数字の入力だけ許可する
    If Chr(KeyAscii) = "-" Then MoneyBox.Value = "-"
    If Not Chr(KeyAscii) Like "[0-9]" Then KeyAscii = 0

End Sub

1行だけコードを追加しました

それが「If Chr(KeyAscii) = “-” Then MoneyBox.Value = “-“」の部分ですね

基本的には数字だけ入力を許可した処理とほぼ変わらないですが、「Chr(KeyAscii) = “-“」の部分で入力された文字列が「ー(半角のマイナス)」だったら

「MoneyBox.Value = “-“」の部分で「MoneyBox」にマイナスの記号を入力してね

という意味になります

ココで重要なのは、数字だけ入力を許可するコードの前にマイナス記号が入力されたかどうかの判定をするということです

この処理が逆になると、数字じゃないというのが優先されて上手く入力出来ないので注意しましょう

では実際にマイナスの数字が入力出来るのか金額ボックスに入力してみましょう

その結果、ちゃんとマイナスの記号と数字が入力されましたね

このまま登録ボタンをクリックしてみましょうか

その結果、ちゃんとセル上ではマイナスの金額が入力されましたね

ちゃんと数式バーにもマイナスの数字が入力されています

これならちゃんとマイナスの数字が入力出来たということです やったね

テキストボックスでも円記号表示と赤数字に設定しよう

ココまで出来たらテキストボックスでも円記号と桁区切りが自動的に設定されました

次はテキストボックスにマイナスの数字の時に赤い数字になるようにしてみましょう

その方が分かりやすいですよね

では、もう一工夫して表示の調整をしてみましょう

Private Sub MoneyBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    '数字の入力だけ許可する
    If Chr(KeyAscii) = "-" Then MoneyBox.Value = "-"
    If Not Chr(KeyAscii) Like "[0-9]" Then KeyAscii = 0

    MoneyBox.Value = Format(MoneyBox.Value, "\\#,##0")
    
    'マイナスの数字の場合に赤い文字色に表示する
    If MoneyBox.Value < 0 Then
        MoneyBox.ForeColor = RGB(255, 0, 0)
    Else
        MoneyBox.ForeColor = RGB(0, 0, 0)
    End If

End Sub

まず、金額のテキストボックスに数字を入力した時に金額として表示したい時は

「MoneyBox.Value = Format(MoneyBox.Value, “¥¥#,##0”)」と設定します

(/(バックスラッシュ)で表示されている部分は半角の「¥」記号です)

「Format」はVBAの関数で指定した対象を目的の表示形式に設定するための関数です

「MoneyBox.Value, “¥¥#,##0″」で「MoneyBoxの値を対象に」「”¥¥#,##0″」形式で表示してねという意味です

「¥」マークを重ねるのは「¥1つ」で「すぐあとに続く文字列を1文字をそのままに表示する」という意味があるので「¥」が二重になっています

その結果を元の「MoneyBox」に設定してあげることで3桁区切りの円記号表示を実現しています

最後にマイナスの数字が入力されたら「文字色を赤」に設定する方法について見ていきましょう

ただ、どうして「NumberFormatLocal」を使わないのか? という疑問があるかもしれません

というのも、「NumberFormatLocal」というのはセルに入力された数字に対してこちらを使うとプラスでもマイナスでも関係なくちゃんと切り分けて表示してくれるからです

今回はそのやり方は省略させてもらいますが、結論から言えばテキストボックスにはこの方法は使えないんですね

そこで一工夫してこんな感じのコードを書きます

    'マイナスの数字の場合に赤い文字色に表示する
    If MoneyBox.Value < 0 Then
        MoneyBox.ForeColor = RGB(255, 0, 0)
    Else
        MoneyBox.ForeColor = RGB(0, 0, 0)
    End If

これはスゴク単純ですね

If MoneyBox.Value < 0 Then
MoneyBox.ForeColor = RGB(255, 0, 0)

この部分でもし、金額のテキストボックスの値が0より小さかったらテキストボックスの文字色を「赤色」にしてね

という意味です

「ForeColor」は文字の色という意味で「RGB(255, 0, 0)」は色をRGB形式で指定してR(レッド)を最大値(255)に設定することで赤色にしています

後半の

Else
MoneyBox.ForeColor = RGB(0, 0, 0)

この部分は、マイナスじゃなかったら金額のテキストボックスの値の色を黒にしてねと設定しています

意外とこの黒に設定するのが重要で例えばマイナスの数字を入力した後に間違ったことに気づいてプラスの数字を入力しようとすると、文字色を赤に変更した設定が残っていてプラスの数字を入力しても赤になってしまう

ということを防ぐ意味があります

ココまで設定出来れば目的だったテキストボックスに「赤色のマイナスの金額を入力する」ということが出来ます

意外とこのやり方を解説しているサイトはまだ少ないようなのでまとめてみました

少しでも役に立てば嬉しいです

繰り返しになりますが、入力制限したテキストボックスにマイナスを入力したいなら、入力内容の判別と文字色の設定をすれば実現出来ます

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です