PR

Access VBA 入力内容に応じてテキストボックスの背景色を変更する方法

VBA

Accessフォームでデータの入力画面を作成することは多々あると思います。特に、複数のユーザーに入力をしてもらう場合には注意が必要で、間違った値が入力されることも考えなくてはなりません。

例えば、アンケートフォームを作成し1~5点の点数を入力するテキストボックスを用意した場合に間違って「6」が入力されると後々データ処理がうまくいかなくなるケースが考えられますし、他にもマイナスの数字を入力してはいけないところに負の値が入力され誤ってデータ集計をしてしまうことも考えられます。

上記の例で示すように、数値データの入力エラーは気づくことが難しく、後々になって影響が大きくなることもあります。

そこで、今回はこのような入力エラーを入力者に気づかせるための仕組みとして、テキストボックスに入力した値が適切な範囲内の数値になっているかの判定条件を設定し、もし、範囲外の数値が入力された場合はテキストボックスの背景色を変更する方法を紹介します。

スポンサーリンク

サンプルフォーム

今回はアンケートフォームを例として、ある質問に対して1~5点を入力させる場合に、それ以外の数値が入力されるとテキストボックスの背景色を赤にする方法を見ていきましょう。

まずは、図1に示すように「F_アンケート」フォームを作成し、アンケート回答を入力する欄として「t_質問1」テキストボックスを配置します。

図1 作成するサンプルフォーム

配置した、「t_質問1」テキストボックスの初期プロパティではコントロールがオンの状態になっているため数値を入力した際に全角数字が入力されます。今回の場合は後々に集計をすることを意識して半角数値に統一することを考慮し、「IME入力モード」プロパティは「半角英数」にします。

図2 テキストボックスのプロパティ設定

しかしながら、この場合でも英字や数値としても1~5以外の数字が入力される可能性があります。

そこで、今回紹介する方法の出番です。VBAを用いて数値型が入力されているかの確認と1~5の範囲での数値が入力されているかのチェックを行い、もし条件から外れている場合はテキストボックスの背景色を赤にするルーチンを組んでいきます。(実際には後者の1~5の数値チェックだけで、文字列の間違いチェックもできるのですが、今回はサンプル紹介として条件設定をしています。)

まずは、「t_質問1」テキストボックスのプロパティシートを開き、更新後処理プロパティに「イベントプロシージャ」を設定します。続いてVBA画面を開き、以下コードを実装します。

Private Sub t_質問1_AfterUpdate()

Me.t_質問1.Value = StrConv(Me.t_質問1.Value, 8)

If IsNumeric(Me.t_質問1.Value) = False Then
    
    MsgBox ("文字列が入力されています。")
    Me.t_質問1.BackColor = RGB(255, 0, 0)
    
ElseIf Me.t_質問1.Value < 1 Or Me.t_質問1.Value > 5 Then

    MsgBox ("1~5以外の数字が入力されました。")
    Me.t_質問1.BackColor = RGB(255, 0, 0)

Else

    MsgBox ("正しい値が入力されました。")
    Me.t_質問1.BackColor = RGB(255, 255, 255)
    
End If

End Sub

それでは、実装したコードの内容を確認していきましょう。

まずは、テキストボックスに全角文字が入力された場合に、これを半角文字に変換するためStrConv関数を用いて処置をしています。StrConv関数の詳細については、以下の記事をご覧ください。

次に、If文の条件式として「IsNumeric(Me.t_質問1.Value) = False」と記載していますが、これは入力された値が数値であるかを確認するための処理です。

ここで、IsNumeric関数は、以下のように定義されます。

IsNumeric(expression

この関数では、expression引数全体が数値として認識される場合は「True」を、それ以外の場合は「False」を返します。

このため、「t_質問1」テキストボックスに数値型以外の値が入力された場合は、If文の条件式が成立するため、Msgboxで文字列が入力されていることの注意喚起と、その次の「Me.t_質問1.BackColor = RGB(255, 0, 0)」でテキストボックスの背景色を赤色に変える処理となります。

「BackColor」プロパティはテキストボックスの背景色を示しており、RGB関数を用いて赤色となるように指定しています。

続いて、数値型の入力が確認できた場合も、今回の例では1~5の値が入力されている必要がありますので、それを条件式に記載しています。

最後に、正しい値が入力されていることが確認できた場合は、その旨のメッセージボックスの表示と、「t_質問1」テキストボックスの背景色を白色とするためのコードを記載しました。

このようにして処理の方法を実装できましたので、実際にフォームを表示して値を入力してみましょう。

データ入力結果の確認

まずは図3に示すように、テキストボックスに「a」を入力した結果を見てみましょう。

図3 文字列を入力した結果

値を入力し「Enter」キーを押下することで更新後処理のルーチンが実行され、文字列が入力されていることのアラートが表示されます。そして、「t_質問1」テキストボックスの背景色が赤色に変わりました。

続いて、図4に示すように、テキストボックスに「7」を入力してみます。

図4 数値範囲を逸脱した結果

この場合も同様に、1~5以外の数値が入力されたアラートが表示され、背景色が赤色に変わります。

最後に正しい値が入力された場合も見てみましょう。

図5 正しい値を入力した結果

この場合、正しい値が入力されたことを示すメッセージボックスが表示され、テキストボックスの背景色は白色のままとなります。

このようにして、入力者に対してエラー入力を気づかせるための仕組みを実装することができました。

まとめ

今回は、テキストボックスに条件に応じた適切な値を入力しないと、その背景色が赤色になる方法を紹介しました。

このような仕組みを設けることでデータの入力エラーを防ぐ一助になると思いますので、フォームを作成してデータベースを構築される方は今回の例を参考にしていただければと思います。

今の時代、VBAに限らずプログラミングができるということは、当然のスキルとして広く社会で認知されています。いまだプログラミングが十分にできないという人は、今からでも遅くありません。できるだけ早く基本的なプログラミングスキルを習得することをお勧めします。

ご自身にあった専門書を参考に、実践的なプログラミング・データベース・サーバ、データ分析・機械学習など、システムエンジニアや今後を担うDX人材に必要とされているスキル獲得に向けて基礎から学んでいくことが大切です。

最初につまずきがちな点も、書籍を読みながら試行錯誤して課題解決していくことで、自身のスキルアップを目指すことができます。思い立ったが吉日、是非業務効率の改善に向けてプログラミング学習に勤しんでください!

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました