バックナンバー検索ツールのユーザーフォームをデザイン

zassibackno3_1catch

雑誌バックナンバー検索ツールのユーザーフォームの作成とデザインについてです。
テキストボックス、コマンドボタンと実行マクロの連携を行っていきます。

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

今回の「雑誌バックナンバー検索ツール」は、検索操作をコントロールするUIを作成します。

検索キーの入力ボックス、VBAを起動させるコマンドボタン等を配置したユーザーフォームをデザインします。

作成するユーザーフォーム全体のデザイン

backnoken3012

作成するユーザーフォームのデザインはこのようになります。

ユーザーフォームの名称を「検索コントロールパネル」とします。

このユーザーフォームに

  1.  検索キーワード入力を行うテキストボックス
  2. キーワードによる検索を行うコマンドボタン
  3. 送品データを検索データベース化するコマンドボタン
  4. シートを削除・クリアするコマンドボタン

を設置します。

各個所にコントロールを配置する

backnoken3013

まずユーザーフォームを挿入します。

VBE(ビジュアルベーシックエディタ)の「挿入」タブから「ユーザーフォーム」選択します。

backnoken3011

ユーザーフォームの名称は「検索コントロールパネル」

挿入したユーザーフォームを適当に広げてください。

ユーザーフォームのプロパティウインドウを表示して

  • (オブジェクト名)を「検索コントロール」
  • Captionを「検索コントロールパネル」

とします。

コントロールパネルへのラベルの設置は、ツールボックスで「A」のラベルボタンでフォームの上部に「検索コントロールパネル」という名称で設置します。

backnoken3001kai

検索期間の入力ボックスを設置

検索期間の入力に関しての設定です。

ツールボックスで「A」のラベルボタンとテキストボックスとコマンドボタンで作成していきます。

backnoken3002kai

プロパティの設定

「検索期間(年)」の設置

  • ラベル 検索期間(年)
  • ラベル 年から  テキストボックス(オブジェクト名)「期間年から」
  • ラベル 年まで  テキストボックス(オブジェクト名)「期間年まで」

「検索期間(月)」の設置

  • ラベル 検索期間(月)
  • ラベル 月から  テキストボックス(オブジェクト名)「期間月から」
  • ラベル 月まで  テキストボックス(オブジェクト名)「期間月まで」

「検索期間(日)」の設置

  • ラベル 検索期間(日)
  • ラベル 日から  テキストボックス(オブジェクト名)「期間日から」
  • ラベル 日まで  テキストボックス(オブジェクト名)「期間日まで」

「期間入力ボタン」の設置

  • (オブジェクト名)を「期間入力」
  • Captionを「期間入力ボタン」

検索キーワードの入力ボックスを設置

こちらもツールボックスで「A」のラベルボタンとテキストボックスとコマンドボタンで作成していきます。プロパティは次のように設定します。

雑誌名検索

「雑誌検索名」テキストボックスの設置

  • ラベル 雑誌検索名
  • (オブジェクト名)を「検索雑誌名」

「雑誌名検索ボタン」の設置

  • (オブジェクト名)を「雑誌名検索」
  • Captionを「雑誌名検索ボタン」

 雑誌コード検索

「雑誌コード」テキストボックスの設置

  • ラベル 雑誌コード
  • (オブジェクト名)を「検索雑誌コード」

「雑誌コード検索ボタン」の設置

  • (オブジェクト名)を「雑誌コード検索」
  • Captionを「雑誌コード検索ボタン」

送品データをデータベース化するボタン

backnoken3009kai

プロパティの設定

「雑誌送品表取り込みボタン」の設置

  • (オブジェクト名)を「送品取込」
  • Captionを「雑誌送品表取り込み」

「雑誌送品表まとめボタン」の設置

  • (オブジェクト名)を「送品まとめ」
  • Captionを「雑誌送品表まとめ」

シートを削除・クリアするボタン

プロパティの設定

「送品表削除ボタン」の設置

  • (オブジェクト名)を「日々送品表削除」
  • Captionを「送品表削除」

「検索クリアボタン」の設置

  • (オブジェクト名)を「検索表示CR」
  • Captionを「検索クリア」

「まとめクリアボタン」の設置

  • (オブジェクト名)を「送品まとめCR」
  • Captionを「まとめクリア」

「検索コントロールパネル」を動かすVBAコード

backnoken3014

ここからは、モジュールにVBAコードを記述していきます。

「検索コントロールパネル」を表示するコード

この「検索コントロールパネル」の表示について、

エクセルBOOKを開いたとき” と ”「検索結果」を開いたとき” に表示されるようにします。

プロジェクトエクスプローラーの「ThisWorkbook」のブックモジュール

以下のコードを記述します。

VBA
Private Sub Workbook_Open()
        If 検索コントロール.Visible Then Exit Sub
        検索コントロール.Show vbModeless
End Sub

同様にプロジェクトエクスプローラーの「Sheet1(検索結果)」のシートモジュール
以下のコードを記述します。

VBA
Private Sub Worksheet_Activate()
        If 検索コントロール.Visible Then Exit Sub
        検索コントロール.Show vbModeless
End Sub

「検索期間入力」を受け入れるコード

「検索コントロール」のユーザーフォームモジュールでのコードは、以下の様になります。

「期間入力ボタン」を押したときに各テキストボックスに入力した指定値が、変数に送られます。

テキストボックスの入力値を初期化

VBA
Option Explicit

Private Sub UserForm_Initialize()
'テキストボックスの初期化
        検索コントロール.Controls("期間年から").Value = ""
        検索コントロール.Controls("期間年まで").Value = ""
        検索コントロール.Controls("期間月から").Value = ""
        検索コントロール.Controls("期間月まで").Value = ""
        検索コントロール.Controls("期間日から").Value = ""
        検索コントロール.Controls("期間日まで").Value = ""
End Sub

「年」「月」「日」の適正値を変数に代入

  • 期間の片側のみの設定の禁止
  • 「年」は1901年から2049年までの入力制限
  • 「日」は1日から31日まで(2月、偶数奇数月の個別設定は無し)
  • 降順での期間指定はNG
  • 期間設定なし(空欄)はOKスルー
VBA
Private Sub 期間入力_Click()
'テキストボックス入力値を変数に代入
        fdatey = 検索コントロール.Controls("期間年から").Value
        tdatey = 検索コントロール.Controls("期間年まで").Value
        fdatem = 検索コントロール.Controls("期間月から").Value
        tdatem = 検索コントロール.Controls("期間月まで").Value
        fdated = 検索コントロール.Controls("期間日から").Value
        tdated = 検索コントロール.Controls("期間日まで").Value
        
        On Error Resume Next
'期間の片側入力を禁止
        If (fdatey = "" And tdatey <> "") Or _
            (fdatey <> "" And tdatey = "") Or _
            (fdatem = "" And tdatem <> "") Or _
            (fdatem <> "" And tdatem = "") Or _
            (fdated = "" And tdated <> "") Or _
            (fdated <> "" And tdated = "") Then GoTo stepA
'年の異常値指定を禁止
        If (fdatey = "" And tdatey = "") Then
            fdatey = ""
            tdatey = ""
        ElseIf Val(fdatey) > Val(tdatey) Then
            GoTo stepA
        ElseIf Not (Val(fdatey) > 1900 And Val(fdatey) < 2050 And _
                    Val(tdatey) > 1900 And Val(tdatey) < 2050) Then
            GoTo stepA
        End If
'月の異常値指定を禁止
        If (fdatem = "" And tdatem = "") Then
            fdatem = ""
            tdatem = ""
        ElseIf Val(fdatem) > Val(tdatem) Then
            GoTo stepA
        ElseIf Not (Val(fdatem) >= 1 And Val(fdatem) <= 12 And _
                    Val(tdatem) >= 1 And Val(tdatem) <= 12) Then
            GoTo stepA
        End If
'日の異常値指定を禁止
        If (fdated = "" And tdated = "") Then
            fdated = ""
            tdated = ""
        ElseIf Val(fdated) > Val(tdated) Then
            GoTo stepA
        ElseIf Not (Val(fdated) >= 1 And Val(fdated) <= 31 And _
                    Val(tdated) >= 1 And Val(tdated) <= 31) Then
            GoTo stepA
        End If
        
Exit Sub
stepA:
        MsgBox "期間は年月日を正しく入力をしてください。", _
                vbExclamation, "検索コントロール"
        検索コントロール.Controls("期間年から").Value = ""
        検索コントロール.Controls("期間年まで").Value = ""
        検索コントロール.Controls("期間月から").Value = ""
        検索コントロール.Controls("期間月まで").Value = ""
        検索コントロール.Controls("期間日から").Value = ""
        検索コントロール.Controls("期間日まで").Value = ""
        
        On Error GoTo 0
End Sub

「雑誌名検索」を実行するコード

「検索コントロール」のモジュールへの入力コードは、

この様になります。

VBA
Private Sub 雑誌名検索_Click()
        myKEY = 検索コントロール.Controls("検索雑誌名").Value
        Module2.雑誌名検索
End Sub

「雑誌コード検索」を実行するコード

「検索コントロール」のモジュールへの入力コードは、
この様になります。

VBA
Private Sub 雑誌コード検索_Click()
        myKEYb = 検索コントロール.Controls("検索雑誌コード").Value
        Module2.雑誌NO検索
End Sub

「送品データ」をデータベース化するコード

送品表のデータベース化するマクロを、関連付ける2つのボタンの設定です。

雑誌送品表取り込みコマンドボタン

VBA
Private Sub 送品取込_Click()
        Module1.送品予定表転記
End Sub

雑誌送品表まとめコマンドボタン

VBA
Private Sub 送品まとめ_Click()
        Module1.データをまとめる
End Sub

「検索結果のクリア、シートの削除・クリア」を実行するコード

検索結果のクリア、シートの削除・クリアを実行するマクロと、コマンドボタンを関連付けます。

検索結果のクリアのコマンドボタン

VBA
Private Sub 検索表示CR_Click()
        Module2.検索結果クリア
End Sub

まとめシートクリアのコマンドボタン

VBA
Private Sub 送品まとめCR_Click()
        Module1.データまとめクリア
End Sub

送品表削除のコマンドボタン

VBA
Private Sub 日々送品表削除_Click()
        Module1.送品予定表削除
End Sub

バックナンバー検索のユーザーフォームデザインのまとめ

backnoken3015

バックナンバー検索ツール作成の最後の段階として、利用者が情報入力をする窓口としてのユーザーフォームをデザインしました。

ユーザーフォームのパネルのデザインは、独自アレンジのデザイン可能です。是非チャレンジしてください。

今回で、ツールの作成作業は終了です。

次回は、実際の使い方を解説していきます。

大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方
初めてのVBAの勉強、構えなくても気軽に始められる。
vbastudy020a
vbastudy021a

電子書籍版「大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方」をamazonで見てみる

(著者)大村あつし
(出版社)技術評論社
(税込価格)1,628円(本体1,480円+税)

学習書の新しい形です。
YouTubeと完全リンクした参考書です。入門と基礎を重点的に22本の動画で解説をしています。
ちょっとした空き時間を利用してでもスマホがあれば学習ができます。
動画は優しい語り口調で、視聴者にある意味安心感を与えてくれます。動画は5分から20分間ぐらいで22本の構成です。
文章解説と動画解説の関係性は、動画解説が主で、文章解説がサポートいう使い方もできます。

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

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

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

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

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

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min