かっきぃーの雑記帳

おもしろき こともなき世に おもしろく

複数選択が可能な チェックボックス(CheckBox)(その2)[とりあえず使えるエクセルユーザーフォーム超入門]

Lesson4 使えるようになっておきたい基本機能

もうちょっと使える表現にしてみる

その1ではチェックボックスの基本的な使い方を紹介しました。ここでは、もう少し実用的な体裁にする方法について紹介します。「マンゴーを選んだかどうか」を"True" か "False" ではなく、

 ”マンゴーを選びました。”
 ”マンゴーを選びませんでした。”

と表示してみます。ここでは、If文を使って CheckBox1.Value が "True" か "False" のどちらかを確認し、それに応じて、適切な文章を表示させる事例にて説明します。

If文については「エクセルVBAマクロ超入門」でも説明しています。

Private Sub CommandButton1_Click()
   If CheckBox1.Value = "True" Then
   ‘ CheckBox1.Value = "True" の場合の処理
   MsgBox "マンゴーを選びました。"
   Else
   ‘ CheckBox1.Value = "True" 以外の場合の処理
   MsgBox "マンゴーを選びませんでした。"
   End If
   End
End Sub

f:id:k_create:20200623093543p:plain

スポンサーリンク

 

 

さらに選択肢を増やしてみる

まずはフォーム上にチェックボックスを増やして合計4つにします。これに合わせて、選択肢も割り当てます。

f:id:k_create:20200623093757p:plain

Private Sub UserForm_Initialize()
   CheckBox1.Caption = "マンゴーを選ぶ"
   CheckBox2.Caption = "りんごを選ぶ"
   CheckBox3.Caption = "梨を選ぶ"
   CheckBox4.Caption = "柿を選ぶ
End Sub

コマンドボタンをクリックしたら、選んだ果物を表示させたいのですが、ここでは「●と●を選びました。」という複数表示を目指します。

先ほど紹介したMsgBox構文は一度に1種類の文章しか表示できません。選んだ果物の組み合わせを表示するには、いったん選択した情報を集めて、それを文章化し、その文章をMsgBox構文で表示するといった順に処理を進めます。

Private Sub CommandButton1_Click()
   If CheckBox1.Value = "True" Then cb01 = "マンゴー"
   If CheckBox2.Value = "True" Then cb02 = "りんご"
   If CheckBox3.Value = "True" Then cb03 = "梨"
   If CheckBox4.Value = "True" Then cb04 = "柿"
   cb_text = cb01 & "と" & cb02 & "と" & cb03 & "と" & cb04 & "を選びました。"
   MsgBox cb_text
   End
End Sub

いったんcb01、cb02、cb03、cb04という変数に文字列を割り当てて、その文字列をつなげて一つの文章(cb_text)にし、それをmsgbox構文で表示します。

文字列の足し算は & で表記します!

f:id:k_create:20200623094511p:plain

おー、うまく表記されましたね。では、りんごと柿を選んでみましょう。すると、、

f:id:k_create:20200623094550p:plain

「と」が多い!

「と」の有無も制御する必要がありそうです。「と」をcb01~cb04の文字列に組み込むのがシンプルで速いですが、できれば最後の果物には「と」をつけたくないですね。

いろいろな工夫があると思いますが、私は次のようにコードを作り変えました。

Private Sub CommandButton1_Click()
   If CheckBox1.Value = "True" Then cb01 = "マンゴー"
   If CheckBox2.Value = "True" Then cb02 = "りんご"
   If CheckBox3.Value = "True" Then cb03 = "梨"
   If CheckBox4.Value = "True" Then cb04 = "柿"
   cb_text01 = cb01 & cb02 & cb03 & cb04
   cb_text01 = Left(cb_text01, Len(cb_text01) - 1)  'お尻の「と」を削除
   cb_text02 = "を選びました。"
   MsgBox cb_text01 & cb_text02
   End
   End Sub

cb_text01 = Left(cb_text01, Len(cb_text01) - 1) は文字列cb_text01の左側からLen(cb_text01) – 1 の文字数だけ抽出しろ、という命令です。Len(cb_text01) はcb_text01 の文字列の数を表しますので、その一つ減じた値、すなわち最後の「と」を除いた数だけ抽出しろ、という命令になるわけです。

いったんcb01~cb04のすべての果物に「と」をつけておいて、ひとつの文章にしておいてから、最後の「と」だけを消す、という方法ですね。

みなさんはどんな方法で対処しますか?

あとは、忘れずに、どれも選択しなかったケースも想定した処理をしておきましょう。

これ、忘れがちだけど重要!

Private Sub CommandButton1_Click()
   If CheckBox1.Value = "True" Then cb01 = "マンゴーと"
   If CheckBox2.Value = "True" Then cb02 = "りんごと"
   If CheckBox3.Value = "True" Then cb03 = "梨と"
   If CheckBox4.Value = "True" Then cb04 = "柿と"
   cb_text01 = cb01 & cb02 & cb03 & cb04
   If cb_text01 = "" Then
   MsgBox "どれも選んでいません。"
   End
   End If

   cb_text01 = Left(cb_text01, Len(cb_text01) - 1)  'お尻の「と」を削除
   cb_text02 = "を選びました。"
   MsgBox cb_text01 & cb_text02
   End
End Sub

f:id:k_create:20200623190930p:plain

 

よし!これでオッケー。

スポンサーリンク

選べるのはひとつ!オプションボタン(OptionButton)(その1)

                  10   11   12   13   14

とりあえず使えるエクセルユーザーフォーム超入門(もくじ)

 

スポンサーリンク

 


#エクセル #Excel #ユーザーフォーム #マクロ #VBA