【Excel VBA】コンボボックス選択でテキストボックスに自動入力する方法

ExcelVBA

登録フォーム作りたい人「コンボボックスの”この選択肢”になったら、テキストボックスには決まったデータを自動で入れたいな。」

本日はこの方法を答えます。

こんにちは、Fujiyaです。
僕は独学でExcelVBAを学び、実際に業務で使いながら、ツールの作り方を発信したりしているブロガーです。

今回はコンボボックスとテキストボックスを連動させて、あらかじめ設定した選択支を選んだら、テキストボックスに決まったデータを入力するという作業をします。

入力フォームの例)

コンボボックス「A会社」を選択した場合

住所や電話番号のテキストボックスに決まったA会社のデータを入力

この機能が使えると入力作業もさらに高速化できると思います。

選択肢からデータを自動入力

選択肢からデータを自動入力

このようなユーザーフォームを作成しました。会社名のコンボボックスの値を変更すると、下のテキストボックスも連動して値が入力されます。

ユーザーフォームの作成についてはわからない人は、詳しく説明している記事のリンクを貼っておくので参考にしてください。

まずはコンボボックスのデータが変わった場合のコードを書いていきます。以下です。

Private Sub ComboBox1_Change()
End Sub

こちらをコピペしてもOKですが、オブジェクトをダブルクリックしても同じようになります。

次に、条件指定です。ifステートメントを使用して、選択肢が「会社A」となった場合の条件のコードを記載します。

ComboBox1が「会社A」となった場合には、郵便番号テキストボックスに「123-4567」が入ります、続いて、住所テキストボックスには「A県A市A町1234-56」、最後に電話番号テキストボックスには「0271-××-××××」となります。コードは以下になります。

Private Sub ComboBox1_Change()
If ComboBox1.Text = "会社A" Then
郵便番号テキストボックス.Text = "123-4567"
住所テキストボックス.Text = "A県A市A町1234-56"
電話番号テキストボックス.Text = "0271-××-××××"
End If
End Sub

コードを解説すると、ComboBox1に「会社A」が選択をされたときに、郵便番号、住所、電話番号のテキストボックスに、それぞれ””に設定してあるテキストが入れるというプログラムです。

これで会社Aは完了です。続いて、会社Bと会社Cも同じようにやっていきます。

Private Sub ComboBox1_Change()
’会社Aについての処理
If ComboBox1.Text = "会社A" Then
郵便番号テキストボックス.Text = "123-4567"
住所テキストボックス.Text = "A県A市A町1234-56"
電話番号テキストボックス.Text = "0271-××-××××"
End If
’会社Bについての処理
If ComboBox1.Text = "会社B" Then
郵便番号テキストボックス.Text = "234-5678"
住所テキストボックス.Text = "B県B市B町1234-56"
電話番号テキストボックス.Text = "0272-××-××××"
End If
’会社Cについての処理
If ComboBox1.Text = "会社C" Then
郵便番号テキストボックス.Text = "345-6789"
住所テキストボックス.Text = "C県C市C町1234-56"
電話番号テキストボックス.Text = "0273-××-××××"
End If
End Sub

これを実行してみると、それぞれ選んだ場合には、設定したデータが入力されると思います。

テキストボックスに決まった入力が必要ない場合の処理

コンボボックスの選択したデータが「会社A~C」以外だった場合に、連動はせず、空白になる処理をします。

この処理をしないと間違って選択してしまった場合に毎回修正をする必要になるので必須ですね。

コードにすると以下です。

If ComboBox1.Text <> "会社A" And ComboBox1.Text <> "会社B" And ComboBox1.Text <> "会社C" Then
郵便番号テキストボックス.Text = ""
住所テキストボックス.Text = ""
電話番号テキストボックス.Text = ""
End If

コードの解説をすると、ComboBox1のデータが会社A〜Cでなかった場合に、郵便番号、住所、電話番号のテキストボックを空欄にしてほしいというプログラムです。

もし「会社D」を新たに登録する場合には、ANDを使ってIFに追加していくだけです。

If ComboBox1.Text <> "会社A" And ComboBox1.Text <> "会社B" And ComboBox1.Text <> "会社C"And ComboBox1.Text <> "会社D" Then

と言う感じです。めちゃめちゃ簡単。

今回のコードのまとめ

最後に今回のコードをまとめます。こちらをコピペして貼り付けてもOKです。

Private Sub ComboBox1_Change()
'登録した組織は電話などを自動入力
If ComboBox1.Text = "会社A" Then
郵便番号テキストボックス.Text = "123-4567"
住所テキストボックス.Text = "A県A市A町1234-56"
電話番号テキストボックス.Text = "0271-××-××××"
End If
If ComboBox1.Text = "会社B" Then
郵便番号テキストボックス.Text = "234-5678"
住所テキストボックス.Text = "B県B市B町1234-56"
電話番号テキストボックス.Text = "0272-××-××××"
End If
If ComboBox1.Text = "会社C" Then
郵便番号テキストボックス.Text = "345-6789"
住所テキストボックス.Text = "C県C市C町1234-56"
電話番号テキストボックス.Text = "0273-××-××××"
End If
'コンボボックスに登録以外のデータが入った場合の処理(追加登録した場合は"and"で追加修正が必要)
If ComboBox1.Text <> "会社A" And ComboBox1.Text <> "会社B" And ComboBox1.Text <> "会社C" Then
郵便番号テキストボックス.Text = ""
住所テキストボックス.Text = ""
電話番号テキストボックス.Text = ""
End If
End Sub

少し複雑そうに見えますが、選択肢の数だけ同じことが入力されているだけなのでプログラム的には難しくないです。

また、VBAを使えない人がコンボボックスの選択肢を増やす場合などに、コンボボックスの値をシートから選ぶことも可能です。これは以前に記事にしているので下のリンクを参考にしていただければ幸いです。

こちらを組み合わせることで、VBAがわからない人でもコンボボックスの操作が可能なので、職場や部署での使い勝手が向上すると思います。

今回の記事は以上になります。
最後までお読みいただきありがとうございました。