雑誌バックナンバー検索ツールのユーザーフォームの作成とデザインについてです。
テキストボックス、コマンドボタンと実行マクロの連携を行っていきます。
こんにちは、じゅんぱ店長(@junpa33)です。
今回の「雑誌バックナンバー検索ツール」は、検索操作をコントロールするUIを作成します。
検索キーの入力ボックス、VBAを起動させるコマンドボタン等を配置したユーザーフォームをデザインします。
バックナンバー検索ツールの記事編成
- バックナンバー検索ツールの使い方とダウンロード
- バックナンバー検索ツール作成手順
コンテンツ
作成するユーザーフォーム全体のデザイン
作成するユーザーフォームのデザインはこのようになります。
ユーザーフォームの名称を「検索コントロールパネル」とします。
このユーザーフォームに
- 検索キーワード入力を行うテキストボックス
- キーワードによる検索を行うコマンドボタン
- 送品データを検索データベース化するコマンドボタン
- シートを削除・クリアするコマンドボタン
を設置します。
各個所にコントロールを配置する
まずユーザーフォームを挿入します。
VBE(ビジュアルベーシックエディタ)の「挿入」タブから「ユーザーフォーム」選択します。
ユーザーフォームの名称は「検索コントロールパネル」
挿入したユーザーフォームを適当に広げてください。
ユーザーフォームのプロパティウインドウを表示して
- (オブジェクト名)を「検索コントロール」
- Captionを「検索コントロールパネル」
とします。
コントロールパネルへのラベルの設置は、ツールボックスで「A」のラベルボタンでフォームの上部に「検索コントロールパネル」という名称で設置します。
検索期間の入力ボックスを設置
検索期間の入力に関しての設定です。
ツールボックスで「A」のラベルボタンとテキストボックスとコマンドボタンで作成していきます。
「検索期間(年)」の設置
- ラベル 検索期間(年)
- ラベル 年から テキストボックス(オブジェクト名)「期間年から」
- ラベル 年まで テキストボックス(オブジェクト名)「期間年まで」
「検索期間(月)」の設置
- ラベル 検索期間(月)
- ラベル 月から テキストボックス(オブジェクト名)「期間月から」
- ラベル 月まで テキストボックス(オブジェクト名)「期間月まで」
「検索期間(日)」の設置
- ラベル 検索期間(日)
- ラベル 日から テキストボックス(オブジェクト名)「期間日から」
- ラベル 日まで テキストボックス(オブジェクト名)「期間日まで」
「期間入力ボタン」の設置
- (オブジェクト名)を「期間入力」
- Captionを「期間入力ボタン」
検索キーワードの入力ボックスを設置
こちらもツールボックスで「A」のラベルボタンとテキストボックスとコマンドボタンで作成していきます。プロパティは次のように設定します。
「雑誌検索名」テキストボックスの設置
- ラベル 雑誌検索名
- (オブジェクト名)を「検索雑誌名」
「雑誌名検索ボタン」の設置
- (オブジェクト名)を「雑誌名検索」
- Captionを「雑誌名検索ボタン」
「雑誌コード」テキストボックスの設置
- ラベル 雑誌コード
- (オブジェクト名)を「検索雑誌コード」
「雑誌コード検索ボタン」の設置
- (オブジェクト名)を「雑誌コード検索」
- Captionを「雑誌コード検索ボタン」
送品データをデータベース化するボタン
「雑誌送品表取り込みボタン」の設置
- (オブジェクト名)を「送品取込」
- Captionを「雑誌送品表取り込み」
「雑誌送品表まとめボタン」の設置
- (オブジェクト名)を「送品まとめ」
- Captionを「雑誌送品表まとめ」
シートを削除・クリアするボタン
「送品表削除ボタン」の設置
- (オブジェクト名)を「日々送品表削除」
- Captionを「送品表削除」
「検索クリアボタン」の設置
- (オブジェクト名)を「検索表示CR」
- Captionを「検索クリア」
「まとめクリアボタン」の設置
- (オブジェクト名)を「送品まとめCR」
- Captionを「まとめクリア」
「検索コントロールパネル」を動かすVBAコード
ここからは、モジュールにVBAコードを記述していきます。
この「検索コントロールパネル」の表示について、
”エクセルBOOKを開いたとき” と ”「検索結果」を開いたとき” に表示されるようにします。
プロジェクトエクスプローラーの「ThisWorkbook」のブックモジュールで
以下のコードを記述します。
Private Sub Workbook_Open()
If 検索コントロール.Visible Then Exit Sub
検索コントロール.Show vbModeless
End Sub
同様にプロジェクトエクスプローラーの「Sheet1(検索結果)」のシートモジュールで
以下のコードを記述します。
Private Sub Worksheet_Activate()
If 検索コントロール.Visible Then Exit Sub
検索コントロール.Show vbModeless
End Sub
「検索コントロール」のユーザーフォームモジュールでのコードは、以下の様になります。
「期間入力ボタン」を押したときに各テキストボックスに入力した指定値が、変数に送られます。
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スルー
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
「検索コントロール」のモジュールへの入力コードは、
この様になります。
Private Sub 雑誌名検索_Click()
myKEY = 検索コントロール.Controls("検索雑誌名").Value
Module2.雑誌名検索
End Sub
「検索コントロール」のモジュールへの入力コードは、
この様になります。
Private Sub 雑誌コード検索_Click()
myKEYb = 検索コントロール.Controls("検索雑誌コード").Value
Module2.雑誌NO検索
End Sub
送品表のデータベース化するマクロを、関連付ける2つのボタンの設定です。
Private Sub 送品取込_Click()
Module1.送品予定表転記
End Sub
Private Sub 送品まとめ_Click()
Module1.データをまとめる
End Sub
検索結果のクリア、シートの削除・クリアを実行するマクロと、コマンドボタンを関連付けます。
Private Sub 検索表示CR_Click()
Module2.検索結果クリア
End Sub
Private Sub 送品まとめCR_Click()
Module1.データまとめクリア
End Sub
Private Sub 日々送品表削除_Click()
Module1.送品予定表削除
End Sub
バックナンバー検索のユーザーフォームデザインのまとめ
バックナンバー検索ツール作成の最後の段階として、利用者が情報入力をする窓口としてのユーザーフォームをデザインしました。
ユーザーフォームのパネルのデザインは、独自アレンジのデザイン可能です。是非チャレンジしてください。
今回で、ツールの作成作業は終了です。
次回は、実際の使い方を解説していきます。
電子書籍版「大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方」をamazonで見てみる
(著者)大村あつし(出版社)技術評論社
(税込価格)1,628円(本体1,480円+税)
学習書の新しい形です。
YouTubeと完全リンクした参考書です。入門と基礎を重点的に22本の動画で解説をしています。
ちょっとした空き時間を利用してでもスマホがあれば学習ができます。
動画は優しい語り口調で、視聴者にある意味安心感を与えてくれます。動画は5分から20分間ぐらいで22本の構成です。
文章解説と動画解説の関係性は、動画解説が主で、文章解説がサポートいう使い方もできます。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。