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
スポンサーリンク
さらに選択肢を増やしてみる
まずはフォーム上にチェックボックスを増やして合計4つにします。これに合わせて、選択肢も割り当てます。
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構文で表示します。
文字列の足し算は & で表記します!
おー、うまく表記されましたね。では、りんごと柿を選んでみましょう。すると、、
「と」が多い!
「と」の有無も制御する必要がありそうです。「と」を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
よし!これでオッケー。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
スポンサーリンク