「のし書き作成」の設定シート作成で、ActiveXコントロールを配置します。
プロパティの設定とVBAコードの解説を行います。
オプションボタン、チェックボックスなどです。
こんにちは、じゅんぱ店長(@junpa33)です。
今回も先回の続きの、「のし書き作成エクセルソフト」のVBAコード組み立ての解説を行っていきます。
のし書き作成エクセルの記事編成
- のし書き作成エクセルの使い方とダウンロード
- のし書き作成エクセルの作成手順
コンテンツ
ActiveXコントロールを「設定」シートに設置
先回の記事で「設定」シートの作表と項目表示のためのエクセルVBAコードを組み立てました。
今回は、その表示された項目を選択するためのコントロールとして、
オプションボタンとチェックボックス、記述したVBAコードを起動するコマンドボタンを設置します。
今回設置するこういったコントロールは、ユーザーフォーム上でもよく利用しますが、
ワークシート上でも簡単に利用することが出来る方法を紹介します。
「設定」シートに設置するコントロールは、「ActiveX」のタイプを使用します。
設置方法は、ツール選択でボタンを指定して手動で目的のセル位置に配置していきます。
コントロールの動作指定は、コントロールのプロパティとVBAコードで行います。
オプションボタン、チェックボックスのコードのポイント
オプションボタン・チェックボックスについて、コード設計の考えを押さえておきます。
まず最初に、オプションボタンを利用した理由は、「9つの設定項目一覧表」の中で選択項目を選ぶのに、
” クリック一つで ” 簡単に選択できるという理由からです。
ただしこれを機能させるためには
「9つの設定項目の一覧」ごとにそれぞれ ” どれか一つを選択できるようにする。” ことが必要です。
デフォルトの設定ではそのようになっていません。
次に、チェックボックスは非常に便利に使えますが、注意しないといけないことがあります。
チェックボックスは、 ” チェックされた!(チェックマークが付いた) “
というイベントに対して「True」という答えを返します。
逆に、 ” チェックマークを外した ” というイベントに対しては「False」を返してきます。
ですので、チェックボックスを使う場合は、If条件文でTrueとFalseの条件分岐が必要になります。
作業前のシートと作業後のシート
「設定」シートの出発点と到着点を確認しておきます。
先回までに行った作業で、「設定」シートはこのような状態になっています。
今回はそれぞれの選択項目の左のセル(チェック欄)に、
オプションボタンやチェックボックスを配置します。
今回の作業終了時には「設定」シートはこのような状態になっています。
「設定」シートへのコントロール設置
オプションボタンのシートへの設置方法の詳細と使い方のコツ
オプションボタンを設置していきます。
全部で61か所になります。
設置自体はすべて同じ作業になりますので、同様の作業を順番に行ってください。
「開発」タブ→「挿入」→「ActiveX オプションボタン」
シートに設置し、即 右クリックでコピーを選択
オプションボタンをコピーしましたので、
あとは、ひたすらペーストしていってください。
シートへの【2種類のチェックボックス】の設置と使い方の違い
チェックボックスもオプションボタンと要領は同じです。
(設置方法はオプションボタンを参考に)
コマンドボタンをシートに設置する2つの方法
コマンドボタンを設置します。
コマンドボタンのプロパティ
- オブジェクト名 設定確定 Caption 1.設定確定ボタン
- オブジェクト名 設定欄リセット Caption 設定欄リセット
- オブジェクト名 熨斗印刷 Caption 2.熨斗印刷ボタン
- オブジェクト名 熨斗書き保存 Caption 3.熨斗書きシート保存
と、してください。
このように出来ます。
出来上がったところで次の作業です。
「開発」タブでデザインモードをクリックします。
そのあと、ひたすら設置したオプションボタンをダブルクリックしていきます。
すべてのオプションボタンをダブルクリックしてください。
シートモジュールへのVBAコード記述
シートモジュールにエクセルVBAコードが記入されていきます。
Private Sub OptionButton1_Click()
End Sub
Private Sub OptionButton2_Click()
End Sub
以下 続きます。
オプションボタンがクリックされた時に、そのボタンの項目が選択されたということで、項目が「項目選択済み一覧」に表示されるようにします。
Private Sub OptionButton1_Click()
Range("I25") = Range("C4").Value
End Sub
Private Sub OptionButton2_Click()
Range("I25") = Range("C5").Value
End Sub
「項目選択済み一覧」の表示位置に注意しながら、順次続けてVBAコードの作成を行っていきます。
オプションボタンを同じシートに複数設置した場合
デフォルトのまま無指定であれば、すべての設置したオプションボタンは、同じ(シート名の)グループとみなされます。
何が起こるかというと、『 シート上に100個のオプションボタンを設置しても、選択できるのはたった一つ』
と、いうことになります。
そこで、9つの設定項目一覧ごとに「グループ設定」を行って、9つの一覧表ごとに選択できるように変更します。
- オブジェクト名 を確認します。
- Caption は空欄にします。
- GroupeName はお好きな名前でOK。他グループとの同名は不可。
この「のし書き作成エクセルソフト」の「設定」シートで利用するチェックボックスは、
「贈り主名併記」設定項目のオプションボタンと連携して機能するようになっています。
つまり、
「贈り主名入れ表書き」設定項目のチェックボックスが幾らチェックONされても、
「贈り主名併記」設定項目のオプションボタンの条件に合わなければ、
「贈り主名入れ表書き」設定項目のチェックボックスが無効化されるような仕組みになっています。
このシートモジュール上では、
オプションボタンとチェックボックスの設定が正しいかどうかを判定するVBAコードを組んでいます。
1次元配列とは。静的配列と動的配列 エクセルVBA'併記する人数をチェックします
Private Sub commandbutton1_Click()
Dim P As Long, i As Long, E As Long
'チェックボックスを配列変数にセット
Dim Cheb(5) As Object
Set Cheb(1) = CheckBox3
Set Cheb(2) = CheckBox4
Set Cheb(3) = CheckBox5
Set Cheb(4) = CheckBox6
Set Cheb(5) = CheckBox7
P = 0
If Worksheets("設定").Range("I39") = "併記しない" Then
E = 1
ElseIf Worksheets("設定").Range("I39") = "2人併記" Then
E = 2
ElseIf Worksheets("設定").Range("I39") = "3人併記" Then
E = 3
End If
'チェックボックスがチェックされている合計数を調べている
For i = 1 To 5
If Cheb(i).Value = True Then
P = P + 1
End If
Next
If P >= E + 1 Then
MsgBox "チェック項目最大数を超えています。"
'設定数に合わない場合はチェックボックス全クリアする
For i = 1 To 5
Cheb(i).Value = False
Next
End If
End Sub
部品化プロシージャーでCallステートメントは必須
コマンドボタンで呼び出す、標準モジュールのプロシージャーは
今の段階では作成していませんが、
次の段階で、このような名前で作成します。
Private Sub 設定確定_Click()
commandbutton1_Click
Call Module1.設定決め
End Sub
Private Sub 設定欄リセット_Click()
Call Module2.設定欄作成
End Sub
Private Sub 熨斗印刷_Click()
Call Module1.熨斗テンプレベースB
End Sub
Private Sub 熨斗書き保存_Click()
Call Module3.熨斗シート保存
End Sub
Option Explicit
'併記する人数をチェックします
Private Sub commandbutton1_Click()
Dim P As Long, i As Long, E As Long
'チェックボックスを配列変数にセット
Dim Cheb(5) As Object
Set Cheb(1) = CheckBox3
Set Cheb(2) = CheckBox4
Set Cheb(3) = CheckBox5
Set Cheb(4) = CheckBox6
Set Cheb(5) = CheckBox7
P = 0
If Worksheets("設定").Range("I39") = "併記しない" Then
E = 1
ElseIf Worksheets("設定").Range("I39") = "2人併記" Then
E = 2
ElseIf Worksheets("設定").Range("I39") = "3人併記" Then
E = 3
End If
'チェックボックスがチェックされている合計数を調べている
For i = 1 To 5
If Cheb(i).Value = True Then
P = P + 1
End If
Next
If P >= E + 1 Then
MsgBox "チェック項目最大数を超えています。"
'設定数に合わない場合はチェックボックス全クリアする
For i = 1 To 5
Cheb(i).Value = False
Next
End If
End Sub
'熨斗サイズ→
Private Sub OptionButton1_Click()
Range("I25") = Range("C4").Value
End Sub
Private Sub OptionButton2_Click()
Range("I25") = Range("C5").Value
End Sub
Private Sub OptionButton3_Click()
Range("I25") = Range("C6").Value
End Sub
Private Sub OptionButton4_Click()
Range("I25") = Range("C7").Value
End Sub
Private Sub OptionButton5_Click()
Range("I25") = Range("C8").Value
End Sub '←熨斗サイズ
'贈り主名印字スタイル→
Private Sub OptionButton11_Click()
Range("I31") = Range("I4").Value
End Sub
Private Sub OptionButton12_Click()
Range("I31") = Range("I5").Value
End Sub
Private Sub OptionButton13_Click()
Range("I31") = Range("I6").Value
End Sub
Private Sub OptionButton14_Click()
Range("I31") = Range("I7").Value
End Sub
Private Sub OptionButton15_Click()
Range("I31") = Range("I8").Value
End Sub '←贈り主名印字スタイル
'慶弔名表書き→
Private Sub OptionButton16_Click()
Range("I33") = Range("C12").Value
End Sub
Private Sub OptionButton17_Click()
Range("I33") = Range("C13").Value
End Sub
Private Sub OptionButton18_Click()
Range("I33") = Range("C14").Value
End Sub
Private Sub OptionButton19_Click()
Range("I33") = Range("C15").Value
End Sub
Private Sub OptionButton20_Click()
Range("I33") = Range("C16").Value
End Sub
Private Sub OptionButton21_Click()
Range("I33") = Range("C17").Value
End Sub
Private Sub OptionButton22_Click()
Range("I33") = Range("C18").Value
End Sub
Private Sub OptionButton23_Click()
Range("I33") = Range("C19").Value
End Sub
Private Sub OptionButton24_Click()
Range("I33") = Range("C20").Value
End Sub
Private Sub OptionButton25_Click()
Range("I33") = Range("C21").Value
End Sub
Private Sub OptionButton26_Click()
Range("I33") = Range("C22").Value
End Sub
Private Sub OptionButton27_Click()
Range("I33") = Range("C23").Value
End Sub
Private Sub OptionButton28_Click()
Range("I33") = Range("C24").Value
End Sub
Private Sub OptionButton29_Click()
Range("I33") = Range("C25").Value
End Sub
Private Sub OptionButton30_Click()
Range("I33") = Range("C26").Value
End Sub
Private Sub OptionButton31_Click()
Range("I33") = Range("C27").Value
End Sub
Private Sub OptionButton32_Click()
Range("I33") = Range("C28").Value
End Sub
Private Sub OptionButton33_Click()
Range("I33") = Range("C29").Value
End Sub
Private Sub OptionButton34_Click()
Range("I33") = Range("C30").Value
End Sub
Private Sub OptionButton35_Click()
Range("I33") = Range("C31").Value
End Sub
Private Sub OptionButton36_Click()
Range("I33") = Range("C32").Value
End Sub
Private Sub OptionButton37_Click()
Range("I33") = Range("C33").Value
End Sub
Private Sub OptionButton38_Click()
Range("I33") = Range("C34").Value
End Sub
Private Sub OptionButton39_Click()
Range("I33") = Range("C35").Value
End Sub
Private Sub OptionButton40_Click()
Range("I33") = Range("C36").Value
End Sub
Private Sub OptionButton41_Click()
Range("I33") = Range("C37").Value
End Sub
Private Sub OptionButton42_Click()
Range("I33") = Range("C38").Value
End Sub
Private Sub OptionButton43_Click()
Range("I33") = Range("C39").Value
End Sub
Private Sub OptionButton44_Click()
Range("I33") = Range("C40").Value
End Sub
Private Sub OptionButton45_Click()
Range("I33") = Range("C41").Value
End Sub
Private Sub OptionButton46_Click()
Range("I33") = Range("C42").Value
End Sub
Private Sub OptionButton47_Click()
Range("I33") = Range("C43").Value
End Sub '←慶弔名表書き
'文字フォント種→
Private Sub OptionButton48_Click()
Range("I35") = Range("F12").Value
End Sub
Private Sub OptionButton49_Click()
Range("I35") = Range("F13").Value
End Sub
Private Sub OptionButton50_Click()
Range("I35") = Range("F14").Value
End Sub
Private Sub OptionButton51_Click()
Range("I35") = Range("F15").Value
End Sub
Private Sub OptionButton52_Click()
Range("I35") = Range("F16").Value
End Sub
Private Sub OptionButton53_Click()
Range("I35") = Range("F17").Value
End Sub
Private Sub OptionButton54_Click()
Range("I35") = Range("F18").Value
End Sub
Private Sub OptionButton55_Click()
Range("I35") = Range("F19").Value
End Sub '←文字フォント種
'贈り主の文字の制御→
Private Sub OptionButton56_Click()
Range("I37") = Range("I12").Value
End Sub
Private Sub OptionButton57_Click()
Range("I37") = Range("I13").Value
End Sub '←贈り主の文字の制御
'文字フォントサイズ→
Private Sub OptionButton58_Click()
If Range("F24") = "" Then Exit Sub
Range("I41") = Range("F24").Value
End Sub
Private Sub OptionButton59_Click()
If Range("F25") = "" Then Exit Sub
Range("I41") = Range("F25").Value
End Sub
Private Sub OptionButton60_Click()
If Range("F26") = "" Then Exit Sub
Range("I41") = Range("F26").Value
End Sub
Private Sub OptionButton61_Click()
If Range("F30") = "" Then Exit Sub
Range("I43") = Range("F30").Value
End Sub
Private Sub OptionButton62_Click()
If Range("F31") = "" Then Exit Sub
Range("I43") = Range("F31").Value
End Sub
Private Sub OptionButton63_Click()
If Range("F32") = "" Then Exit Sub
Range("I43") = Range("F32").Value
End Sub '←文字フォントサイズ
'送り主名併記→
Private Sub OptionButton64_Click()
Range("I39") = Range("I17").Value
End Sub
Private Sub OptionButton65_Click()
Range("I39") = Range("I18").Value
End Sub
Private Sub OptionButton66_Click()
Range("I39") = Range("I19").Value
End Sub '←送り主名併記
'設定した項目を確定する
Private Sub 設定確定_Click()
commandbutton1_Click
Call Module1.設定決め
End Sub
Private Sub 設定欄リセット_Click()
Call Module2.設定欄作成
End Sub
Private Sub 熨斗印刷_Click()
Call Module1.熨斗テンプレベースB
End Sub
Private Sub 熨斗書き保存_Click()
Call Module3.熨斗シート保存
End Sub
「設定」シートへのActiveXコントロール設置 まとめ
今回設置したオプションボタン、チェックボックス、コマンドボタンについては、
マウスクリック操作で起こるイベントからの動作を、シートモジュールで記述することになります。
その動作としては、シートのセルへ値を書き込んだり、
標準モジュールに記述されたプロシージャーを呼び出し実行させたり、ということになります。
次回は、今回の選択された項目をシート上で反映させていくVBAコードを組み立てます。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。