Windows 11 & Office 2021 Access 2021

レコード検索時に該当するレコードがない場合はメッセージを表示する

投稿日:2023年8月24日 更新日:

フォームに検索ボックス(テキストボックス)を設置して、管理番号を入力したら該当のレコードを抽出する仕組みを作ります。

その時、検索ボックスに該当しない番号が入力されたら、メッセージを表示させて修正を促すようにします。

マクロでDCount関数を使用して設定します。

該当しない番号が入力されたらメッセージを表示するフォーム

参考ここでのフォームの表示は、既定の[タブ付きドキュメント]です。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。

[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い

Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...

続きを見る

帳票フォームの作成

以下のようなテーブルがあります。テーブル名は、[T_商品]です。

このテーブルをもとにフォームを帳票作成します。

テーブル名[T_商品]のデータシートビュー

テーブルのデータシートビューで[管理番号]の[データ型]は、[短いテキスト]としています。

テーブルのデータシートビュー

[作成]タブの[フォーム]グループにある[その他のフォーム]から[複数のアイテム]を選択します。

複数のアイテム

複数のレコードを一度に表示するフォームを作成します。

[作成]タブの[[その他のフォーム]-[複数のアイテム]

作成時は、レイアウトビューで表示されますが、[フォームレイアウトのデザイン]タブの[表示]から[デザインビュー]に切り替えるなどして、フォームの体裁を整えます。

[フォームレイアウトのデザイン]タブの[表示]-[デザインビュー]

フォーム名は[F_管理番号検索]としています。

[F_管理番号検索]と名前を付けたフォーム

参考コントロールの幅の調整などは、[レイアウトビュー]で操作したほうが効率よく操作できると思います。

レイアウトビューでフォームのコントロールをカスタマイズ

Accessのフォームには、デザインビュー、レイアウトビュー、フォームビューの3つの表示方法があります。 コントロールのサイズや位置などを調 ...

続きを見る

レコードの編集ができないように設定

既定のままでは、レコードの編集ができてしまいますので、編集ができないように設定します。

フォームをデザインビューで開いて、[詳細]エリアのコントロールをすべて選択します。

[フォームデザイン]タブの[ツール]グループにある[プロパティシート]をクリックします。

[F4]キーを押して、プロパティを表示することもできます。

キーボード[F4]キー

プロパティシートの[選択の種類]には[複数のオブジェクトを選択中]と表示されます。

[データ]タブの[編集ロック]を[はい]にします。

プロパティの[データ]タブの[編集ロック]-[はい]

レコードの追加と削除ができないように設定

フォーム作成時は、新規レコードが追加できる状態になっていますので、追加できないように設定します。

新規レコードが追加できるフォーム

[フォーム]のプロパティを表示して、[データ]タブの[追加の許可]と[削除の許可]を[いいえ]にします。

フォームプロパティ[データ]タブの[追加の許可]と[削除の許可]を[いいえ]に設定

検索ボックス(テキストボックス)の設置

フォームヘッダーに非連結のテキストボックスを挿入して、それを検索用のテキストボックスにします。

[フォームデザイン]タブの[コントロール]グループから[テキストボックス]を選択して、フォームヘッダーでドラッグします。

[フォームデザイン]タブの[コントロール]から[テキストボックス]を挿入

テキストボックスのプロパティを表示して、[その他]タブの[名前]に[検索ボックス]と入力します。

テキストボックスのプロパティ[名前]-[検索ボックス]

また、管理番号に漢字やひらがなが含まれていない場合は、検索ボックスの入力時は、IMEモードをオフにしておくと便利です。

[その他]タブの[IME入力モード]を[オフ]にします。

[検索ボックス]のプロパティ[IME入力モード]を[オフ]

[検索]ボタンの設置

[検索ボックス]に入力された値でデータを検索できるようにします。

[フォームデザイン]タブの[コントロール]グループから[ボタン]を選択して、フォームヘッダーに挿入します。

コマンドボタンウィザードが表示されたら[キャンセル]をクリックして閉じます。

[フォームデザイン]タブの[コントロール]から[ボタン]を選択してフォームヘッダーに挿入

コマンドボタンの[名前]と[標題]は、[検索]にします。

プロパティの[すべて]タブで入力します。

コマンドボタンのプロパティ[名前]と[標題]-[検索]

クリック時イベントでマクロ設定

「検索」ボタンをクリックしたら、フィルターを実行するように仕組みを作ります。

[検索]ボタンのプロパティを表示して、[イベント]タブの[クリック時]の[ビルダー選択]ボタン[…]をクリックします。

[検索]ボタンのプロパティ[イベント]タブの[クリック時]-[ビルダー選択]ボタン

[ビルダーの選択]ダイアログボックスが表示されますので、[マクロビルダー]を選択して[OK]ボタンをクリックします。

[ビルダーの選択]ダイアログボックスで[マクロビルダー]を選択

[マクロデザイン]ウィンドウが表示されますので、[新しいアクションの追加]の▼ボタンをクリックして、[フィルターの実行]を選択します。

[アクションカタログ]から選択してマクロウィンドウへ追加する方法もあります。

[新しいアクションの追加]で[フィルターの実行]を選択

マクロアクション[フィルターの実行]の[Where条件式]のテキストボックスに以下を入力します。

これで[管理番号]と[検索ボックス]の番号が同じレコードが抽出されます。

上書き保存して閉じます。

[管理番号]=[Forms]![F_管理番号検索]![検索ボックス]

マクロアクション[フィルターの実行]の[Where条件式]

[検索]ボタンのプロパティ、クリック時イベントには、[埋め込みマクロ]と表示されます。

[検索]ボタンの-クリック時イベントに[埋め込みマクロ]と表示されたプロパティ

フォームビューに切り替えて、[検索ボックス]に管理番号を入力して[検索]ボタンをクリックすると、該当のレコードが抽出されます。

フォームビューで[検索ボックス]に管理番号を入力して[検索]ボタンをクリック

フィルターの[解除]ボタンを作成

フィルターされたレコードを解除するコマンドボタンも設置します。

フィルターの解除は、コマンドボタンを作成しなくても実行できますが、コマンドボタンがあったほうが便利なので作成します。

[検索]ボタンの時と同じように、[フォームデザイン]タブの[コントロール]グループから[ボタン]を選択してフォームヘッダーに挿入します。

コマンドボタンの[名前]と[標題]は、[解除]にします。

[解除]ボタンのプロパティを表示して、[イベント]タブの[クリック時]の[ビルダー選択]ボタン[…]をクリックします。

[解除]ボタンのプロパティ[イベント]タブの[クリック時]の[ビルダー選択]ボタン

[検索」ボタンと同じようにマクロビルダーで設定します。

[ビルダーの選択]ダイアログボックスで[マクロビルダー]を選択

[新しいアクションの追加]の▼ボタンをクリックして、[フィルター/並べ替えの解除]を選択します。

[アクションカタログ]から選択してマクロウィンドウへ追加する方法もあります。

[新しいアクションの追加]で[フィルター/並べ替えの解除]を選択

そして、すぐ下の[新しいアクションの追加]で[コントロールの移動]を選択します。

[コントロール名]には[検索ボックス]と入力します。

[新しいアクションの追加]の[コントロールの移動]

検索ボックスの値を空白にするため、マクロアクションを追加します。

[マクロデザイン]の[すべてのアクションを表示]をクリックして、マクロアクションから[値の代入]を選択します。

マクロアクション[値の代入]は下から4番目にあります。

[アイテム]には[検索ボックス]と入力して、[式]には[Null]と入力します。

検索ボックスの鍵括弧は、保存後に自動で付きますが、不安であれば鍵括弧を付けて入力してください。

以下のようになったら、上書き保存して閉じます。

マクロアクション[値の代入]を追加

これで[解除]ボタンをクリックすると、検索ボックスは空白になり、すぐに次の検索ができるようになります。

フォームヘッダーの[解除]ボタン

該当しない管理番号が入力されたらメッセージを表示

検索ボックスに該当しない番号が入力されたら、メッセージを表示して修正を促すようにします。

[検索]ボタンのマクロウィンドウを表示して修正します。

[検索]ボタンのクリック時イベント

[新しいアクションの追加]で[If]を選択します。

条件式に以下を入力します。テーブル[T_商品]の[管理番号]と[検索ボックス]の番号で一致するものがないという意味になります。

DCount 関数 - Microsoft サポート(Microsoft)

DCount("*","T_商品","[管理番号]=[検索ボックス]")=0

[If]の条件式に入力

そして、すぐ下の[新しいアクションの追加]で[メッセージボックス]を選択します。

[メッセージ]には、メッセージウィンドウに表示させたい文字列を入力します。ここでは、以下のように入力します。

存在しない管理番号です。確認してください!

[メッセージボックス]の[警告音]、[メッセージの種類]、[メッセージタイトル]などは、任意で設定してください。

ここでは、メッセージの種類を[注意!]にします。

マクロアクション[メッセージボックス]を追加

その後、検索ボックスにカーソルを移動して、すぐ修正できるようにします。

[新しいアクションの追加]で[コントロールの移動]を選択して、[コントロール名]に[[検索ボックス]]と入力します。

鍵括弧なしでも動作すると思いますが、念のため入力しておきます。

[新しいアクションの追加]で[コントロールの移動]を追加

マクロアクション[If]のブロックを上へ移動します。

マクロアクション[If]のブロックを上へ移動

そして、[Elseの追加]をクリックします。

マクロアクション[If]の[Elseの追加]

[Else]に[フィルターの実行]アクションを追加するために、[フィルターの実行]を選択して[上へ移動]をクリックします。

マクロアクション[フィルターの実行]を[上へ移動]

マクロアクションの順番が以下のようになったことを確認して、上書き保存して閉じます。

[検索]ボタンのクリック時イベントのマクロアクション

参考DCount関数を使って、重複した番号が入力されたらメッセージを出すこともできます。

重複データが入力されたらオリジナルのメッセージを表示する

Accessのフォームで受付番号を入力するように作成しています。 受付番号を入力したときに、既に入力済みの番号であればメッセージウィンドウを ...

続きを見る

テーブルやクエリにデータがない場合にも活用できます。

テーブル/クエリにレコードが1件もない時にメッセージを表示する

Accessのテーブル/クエリでレコードが1件もない時、そのテーブルを基にして作成したフォームを開こうとする場合は、[データがありません]と ...

続きを見る

動作の確認

[検索ボックス]に該当しない管理番号を入力して、[検索]ボタンをクリックすると、メッセージウィンドウが表示されます。

[OK]ボタンをクリックして閉じると、カーソルは[検索ボックス]に表示されます。

検索ボックスに該当しない番号を入力して表示されたメッセージウィンドウ

該当する管理番号があれば、該当のレコードが表示されます。

該当する番号でレコードが抽出されたフォーム

参考もし、[検索ボックス]が空の場合に別のメッセージを表示したいのであれば、[検索]ボタンのクリック時のマクロアクションを以下のように修正します。

[If]の[Else Ifの追加]でアクションを追加します。

[検索]ボタンのクリック時のマクロアクション-
[Else Ifの追加]でアクションを追加

入力以外は[Enter]キーで操作できるようにするには

管理番号の入力以外は、[Enter]キーで操作できるように修正します。

[フォームデザイン]タブの[ツール]グループにある[タブオーダー]をクリックします。

[タブオーダー]ダイアログボックスで[フォームヘッダー]を表示します。

先頭に[検索ボックス]がきて、2番目に[検索]、3番目に[解除]があればOKです。

[フォームデザイン]タブの[タブオーダー]

[検索ボックス]に入力して確定後、[Enter]キーを押すと[検索]ボタンが選択された状態になります。

そのまま[Enter]キーを押すと、検索を実行できます。

[検索ボックス]に入力確定後[Enter]キーを押して、フォーカスされた[検索]ボタン

検索を実行した後は、[解除]ボタンへ移動するように設定します。

[検索]ボタンのクリック時イベントのマクロウィンドウを表示して、修正します。

[検索]ボタンのプロパティ-クリック時イベント

マクロアクション[フィルターの実行]の後ろの[新しいアクションの追加]で[コントロールの移動]を選択します。

[コントロール名]に[[解除]]と入力します。

マクロアクション[フィルターの実行]の後ろに[コントロールの移動]を追加

これで、[検索]ボタンを[Enter]キーで押して実行した後は、[解除]ボタンへフォーカスが移動します。

[検索]ボタンを押した後、フォーカスされた[解除]ボタン

参考フォームの[タブオーダー]については、以下の記事で解説しています。

フォームのタブオーダーとタブストップの設定

タブオーダーとは、キーボートの[Tab]キーや[Enter]キーを押して、カーソルがフォーム内のコントロールを移動するときの順番のことです。 ...

続きを見る

フォームを表示した時に[検索ボックス]にカーソルがある状態にする

フォーム[F_管理番号検索]を表示した時に[検索ボックス]にカーソルがあると、すぐに入力できるようになります。

[フォーム]のプロパティを表示して、[イベント]タブの[読み込み時]の[ビルダーの選択]ボタン[…]をクリックします。

[ビルダーの選択]ダイアログボックスが表示されたら、[マクロビルダー]を選択します。

[フォームプロパティ]の[イベント]タブの[読み込み時]

[新しいアクションの追加]で[コントロールの移動]を選択して、[コントロール名]に[[検索ボックス]]と入力します。

上書き保存して閉じます。

[新しいアクションの追加]で[コントロールの移動]を選択

これで、フォームを開くと、検索ボックスにカーソルが表示されるようになります。

[検索ボックス]にカーソルがあるフォーム

検索時以外はデータを表示しないようにするには

フォームを開いた時にすべてのレコードを表示したくない場合の方法です。

検索時のみ該当レコードを表示して、それ以外はフォームにレコードを表示させないようにします。

フォームのプロパティを表示して、[データ]タブの[フィルター]に[false]と入力し、[読み込み時にフィルターを適用]を[はい]にします。

これで、フォームを表示した時にデータは表示されません。

フォームプロパティの[フィルター]-[false]、[読み込み時にフィルターを適用]-[はい]

[解除]ボタンをクリックした時も、データを表示させないようにします。

[解除]ボタンのプロパティを表示して、[イベント]タブのクリック時の[…]をクリックして、再度、マクロウィンドウを表示します。

[解除]ボタンのプロパティ[イベント]タブのクリック時

マクロアクションに[フィルターの実行]を追加します。

[Where条件式]に[False]と入力します。

マクロアクションに[フィルターの実行]を追加

先頭の[メニューコマンドの実行]を削除します。

マクロアクション[メニューコマンドの実行]を削除

マクロアクションが以下のようになったら、上書きして閉じます。

[解除]ボタンのクリック時のマクロアクション

これでフィルターを解除してもデータは表示されなくなります。

[解除]ボタンを押したときのフォーム

[フォームを閉じる]ボタンを設置

あとは、フォームに[閉じる]ボタンを設置すれば、検索用のフォームは完了すると思います。

フォームヘッダーにコマンドボタンを1個挿入します。[名前]と[標題]は[閉じる]にします。

クリック時イベントで[マクロビルダー]を選択します。

マクロアクションで[ウィンドウを閉じる]を選択して、上書きして閉じます。

[オブジェクトの種類]で何も指定しない場合は、アクティブウィンドウが閉じられます。

[閉じる]ボタンのクリック時イベントのマクロアクション[ウィンドウを閉じる]

また、フォームのプロパティで[書式]タブの[閉じるボタン]を[いいえ]にしておくといいと思います。

フォームのプロパティ[書式]タブの[閉じるボタン]-[いいえ]

フォームを開くと以下のようになります。

設定後のフォームビュー

参考レコードを抽出する方法は、以下の記事も参考になると思います。

フォームのコンボボックスの値でレコードを抽出

フォームにコンボボックスを作成して、そのリストから選択して一致するレコードを抽出できるようにします。 ウィザードを使い、コンボボックスの値は ...

続きを見る

2つのコンボボックスに重複しないデータを表示してレコードを抽出

Accessでコンボボックスを使用してレコードを抽出する方法はいくつかありますが、テーブル内の重複しないデータをコンボボックスに表示して作成 ...

続きを見る

以下の記事ではあいまい検索でレコードを抽出して、抽出したレコード数を自動表示するようにしています。また、あいまい検索でも該当するレコードがない場合は、メッセージを表示する仕組みも解説しています。

テキストボックスの文字列でレコードを抽出(マクロビルダーで設定)

Accessでフォームのテキストボックスに入力した文字列でレコードを抽出する方法です。 ここでは、テーブルを基にウィザードを使って表形式のフ ...

続きを見る

検索用のコンボボックスなら、ウィザードで簡単に作成できます。

コンボボックス作成ウィザードを使って検索用コンボボックスを簡単作成

Accessのフォームで検索用コンボボックスを作成する方法です。 コンボボックス作成ウィザードを使って簡単に作成することができます。 この記 ...

続きを見る

検索

ほかの記事も検索してみませんか?

Access / Excel / PowerPoint / Word

関連記事30件

Profile

-Windows 11 & Office 2021 Access 2021

Copyright © 2001-2024 初心者のためのOffice講座 All Rights Reserved.

Copyright© 初心者のためのOffice講座 , 2024 AllRights Reserved Powered by AFFINGER4.