ActiveXコントロールをシートに設置する。のし書き作成エクセル

noshigakisyousai2eyecatch

「のし書き作成」の設定シート作成で、ActiveXコントロールを配置します。

プロパティの設定とVBAコードの解説を行います。
オプションボタン、チェックボックスなどです。

こんにちは、じゅんぱ店長(@junpa33)です。

今回も先回の続きの、「のし書き作成エクセルソフト」のVBAコード組み立ての解説を行っていきます。

記事内容について

この記事は、のし書き作成エクセルソフトのリライト以前の内容を残したものになります。

リライト後の同様テーマの記事は別記事にてご覧いただけます。

リライトの記事では、「設定」シートのすべてを、VBAコードで作成するようにしています。

コントロールについては、エクセル装備のフォームコントロールを使用しています。

ActiveXコントロールを「設定」シートに設置

noshigakisetteip014

先回の記事で「設定」シートの作表と項目表示のためのエクセルVBAコードを組み立てました。

今回は、その表示された項目を選択するためのコントロールとして、

オプションボタンチェックボックス、記述したVBAコードを起動するコマンドボタンを設置します。

今回設置するこういったコントロールは、ユーザーフォーム上でもよく利用しますが、

ワークシート上でも簡単に利用することが出来る方法を紹介します。

「設定」シートに設置するコントロールは、「ActiveX」のタイプを使用します。

設置方法は、ツール選択でボタンを指定して手動で目的のセル位置に配置していきます。

コントロールの動作指定は、コントロールのプロパティとVBAコードで行います。

オプションボタン、チェックボックスのコードのポイント

オプションボタン・チェックボックスについて、コード設計の考えを押さえておきます。

まず最初に、オプションボタンを利用した理由は、「9つの設定項目一覧表」の中で選択項目を選ぶのに、

” クリック一つで ” 簡単に選択できるという理由からです。

ただしこれを機能させるためには

「9つの設定項目の一覧」ごとにそれぞれ ” どれか一つを選択できるようにする。” ことが必要です。

デフォルトの設定ではそのようになっていません。

次に、チェックボックスは非常に便利に使えますが、注意しないといけないことがあります。

チェックボックスは、 ” チェックされた!(チェックマークが付いた) “

というイベントに対して「True」という答えを返します。

逆に、 ” チェックマークを外した ” というイベントに対しては「False」を返してきます。

ですので、チェックボックスを使う場合は、If条件文でTrueとFalseの条件分岐が必要になります。

作業前のシートと作業後のシート

「設定」シートの出発点と到着点を確認しておきます。

出発点(前回記事までの仕上がり)

先回までに行った作業で、「設定」シートはこのような状態になっています。

今回はそれぞれの選択項目の左のセル(チェック欄)に、

オプションボタンやチェックボックスを配置します。

noshigakisettei001a

到着点(今回の作業完了状態)

今回の作業終了時には「設定」シートはこのような状態になっています。

noshigakisettei004

「設定」シートへのコントロール設置

オプションボタンの設置

VBAOptionbuttoneyecatch オプションボタンのシートへの設置方法の詳細と使い方のコツ

オプションボタンを設置していきます。

全部で61か所になります。

設置自体はすべて同じ作業になりますので、同様の作業を順番に行ってください。

noshigakisettei005
矢印下001
noshigakisettei006a

「開発」タブ→「挿入」→「ActiveX オプションボタン」

noshigakisettei007a

シートに設置し、即 右クリックでコピーを選択

矢印下001

オプションボタンをコピーしましたので、

あとは、ひたすらペーストしていってください。

noshigakisettei008

チェックボックスの設置

VBACheckBoxeyecatch シートへの【2種類のチェックボックス】の設置と使い方の違い

チェックボックスもオプションボタンと要領は同じです。

noshigakisettei009a

(設置方法はオプションボタンを参考に)

コマンドボタンの設置

vbabuttoneyecatch コマンドボタンをシートに設置する2つの方法

コマンドボタンを設置します。

noshigakisettei012a

コマンドボタンのプロパティ設定変更

noshigakisettei013a

コマンドボタンのプロパティ

  • オブジェクト名 設定確定  Caption 1.設定確定ボタン
  • オブジェクト名 設定欄リセット Caption 設定欄リセット
  • オブジェクト名 熨斗印刷  Caption 2.熨斗印刷ボタン
  • オブジェクト名 熨斗書き保存  Caption 3.熨斗書きシート保存

と、してください。

設置完了したら次の作業です

このように出来ます。

noshigakisettei004

出来上がったところで次の作業です。

「開発」タブでデザインモードをクリックします。

noshigakisettei010a

そのあと、ひたすら設置したオプションボタンをダブルクリックしていきます。

すべてのオプションボタンをダブルクリックしてください。

シートモジュールへのVBAコード記述

オプションボタン

シートモジュールにエクセルVBAコードが記入されていきます。

VBA
Private Sub OptionButton1_Click()

End Sub

Private Sub OptionButton2_Click()

End Sub

以下 続きます。

オプションボタンがクリックされた時に、そのボタンの項目が選択されたということで、項目が「項目選択済み一覧」に表示されるようにします。

VBA
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つの一覧表ごとに選択できるように変更します。

ポイント
  1. オブジェクト名 を確認します。
  2. Caption は空欄にします。
  3. GroupeName はお好きな名前でOK。他グループとの同名は不可。
noshigakisettei011a

チェックボックス

この「のし書き作成エクセルソフト」の「設定」シートで利用するチェックボックスは、

「贈り主名併記」設定項目のオプションボタンと連携して機能するようになっています。

つまり、

「贈り主名入れ表書き」設定項目のチェックボックスが幾らチェックONされても、

「贈り主名併記」設定項目のオプションボタンの条件に合わなければ、

「贈り主名入れ表書き」設定項目のチェックボックスが無効化されるような仕組みになっています。

このシートモジュール上では、

オプションボタンとチェックボックスの設定が正しいかどうかを判定するVBAコードを組んでいます。

vbahairetueyecatch 1次元配列とは。静的配列と動的配列 エクセルVBA
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

コマンドボタン

vbacalleyecatch 部品化プロシージャーでCallステートメントは必須

コマンドボタンで呼び出す、標準モジュールのプロシージャーは

今の段階では作成していませんが、

次の段階で、このような名前で作成します。

VBA
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

シートモジュールのVBAコード全体

VBA
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コントロール設置 まとめ

noshigakisetteip015

今回設置したオプションボタン、チェックボックス、コマンドボタンについては、

マウスクリック操作で起こるイベントからの動作を、シートモジュールで記述することになります。

その動作としては、シートのセルへ値を書き込んだり、

標準モジュールに記述されたプロシージャーを呼び出し実行させたり、ということになります。

次回は、今回の選択された項目をシート上で反映させていくVBAコードを組み立てます。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。