フォームに検索ボックス(テキストボックス)を設置して、管理番号を入力したら該当のレコードを抽出する仕組みを作ります。
その時、検索ボックスに該当しない番号が入力されたら、メッセージを表示させて修正を促すようにします。
マクロでDCount関数を使用して設定します。
参考ここでのフォームの表示は、既定の[タブ付きドキュメント]です。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
この記事の目次
帳票フォームの作成
以下のようなテーブルがあります。テーブル名は、[T_商品]です。
このテーブルをもとにフォームを帳票作成します。
テーブルのデータシートビューで[管理番号]の[データ型]は、[短いテキスト]としています。
[作成]タブの[フォーム]グループにある[その他のフォーム]から[複数のアイテム]を選択します。
複数のアイテム
複数のレコードを一度に表示するフォームを作成します。
作成時は、レイアウトビューで表示されますが、[フォームレイアウトのデザイン]タブの[表示]から[デザインビュー]に切り替えるなどして、フォームの体裁を整えます。
フォーム名は[F_管理番号検索]としています。
参考コントロールの幅の調整などは、[レイアウトビュー]で操作したほうが効率よく操作できると思います。
-
レイアウトビューでフォームのコントロールをカスタマイズ
Accessのフォームには、デザインビュー、レイアウトビュー、フォームビューの3つの表示方法があります。 コントロールのサイズや位置などを調 ...
レコードの編集ができないように設定
既定のままでは、レコードの編集ができてしまいますので、編集ができないように設定します。
フォームをデザインビューで開いて、[詳細]エリアのコントロールをすべて選択します。
[フォームデザイン]タブの[ツール]グループにある[プロパティシート]をクリックします。
[F4]キーを押して、プロパティを表示することもできます。
プロパティシートの[選択の種類]には[複数のオブジェクトを選択中]と表示されます。
[データ]タブの[編集ロック]を[はい]にします。
レコードの追加と削除ができないように設定
フォーム作成時は、新規レコードが追加できる状態になっていますので、追加できないように設定します。
[フォーム]のプロパティを表示して、[データ]タブの[追加の許可]と[削除の許可]を[いいえ]にします。
検索ボックス(テキストボックス)の設置
フォームヘッダーに非連結のテキストボックスを挿入して、それを検索用のテキストボックスにします。
[フォームデザイン]タブの[コントロール]グループから[テキストボックス]を選択して、フォームヘッダーでドラッグします。
テキストボックスのプロパティを表示して、[その他]タブの[名前]に[検索ボックス]と入力します。
また、管理番号に漢字やひらがなが含まれていない場合は、検索ボックスの入力時は、IMEモードをオフにしておくと便利です。
[その他]タブの[IME入力モード]を[オフ]にします。
[検索]ボタンの設置
[検索ボックス]に入力された値でデータを検索できるようにします。
[フォームデザイン]タブの[コントロール]グループから[ボタン]を選択して、フォームヘッダーに挿入します。
コマンドボタンウィザードが表示されたら[キャンセル]をクリックして閉じます。
コマンドボタンの[名前]と[標題]は、[検索]にします。
プロパティの[すべて]タブで入力します。
クリック時イベントでマクロ設定
「検索」ボタンをクリックしたら、フィルターを実行するように仕組みを作ります。
[検索]ボタンのプロパティを表示して、[イベント]タブの[クリック時]の[ビルダー選択]ボタン[…]をクリックします。
[ビルダーの選択]ダイアログボックスが表示されますので、[マクロビルダー]を選択して[OK]ボタンをクリックします。
[マクロデザイン]ウィンドウが表示されますので、[新しいアクションの追加]の▼ボタンをクリックして、[フィルターの実行]を選択します。
[アクションカタログ]から選択してマクロウィンドウへ追加する方法もあります。
マクロアクション[フィルターの実行]の[Where条件式]のテキストボックスに以下を入力します。
これで[管理番号]と[検索ボックス]の番号が同じレコードが抽出されます。
上書き保存して閉じます。
[検索]ボタンのプロパティ、クリック時イベントには、[埋め込みマクロ]と表示されます。
フォームビューに切り替えて、[検索ボックス]に管理番号を入力して[検索]ボタンをクリックすると、該当のレコードが抽出されます。
フィルターの[解除]ボタンを作成
フィルターされたレコードを解除するコマンドボタンも設置します。
フィルターの解除は、コマンドボタンを作成しなくても実行できますが、コマンドボタンがあったほうが便利なので作成します。
[検索]ボタンの時と同じように、[フォームデザイン]タブの[コントロール]グループから[ボタン]を選択してフォームヘッダーに挿入します。
コマンドボタンの[名前]と[標題]は、[解除]にします。
[解除]ボタンのプロパティを表示して、[イベント]タブの[クリック時]の[ビルダー選択]ボタン[…]をクリックします。
[検索」ボタンと同じようにマクロビルダーで設定します。
[新しいアクションの追加]の▼ボタンをクリックして、[フィルター/並べ替えの解除]を選択します。
[アクションカタログ]から選択してマクロウィンドウへ追加する方法もあります。
そして、すぐ下の[新しいアクションの追加]で[コントロールの移動]を選択します。
[コントロール名]には[検索ボックス]と入力します。
検索ボックスの値を空白にするため、マクロアクションを追加します。
[マクロデザイン]の[すべてのアクションを表示]をクリックして、マクロアクションから[値の代入]を選択します。
マクロアクション[値の代入]は下から4番目にあります。
[アイテム]には[検索ボックス]と入力して、[式]には[Null]と入力します。
検索ボックスの鍵括弧は、保存後に自動で付きますが、不安であれば鍵括弧を付けて入力してください。
以下のようになったら、上書き保存して閉じます。
これで[解除]ボタンをクリックすると、検索ボックスは空白になり、すぐに次の検索ができるようになります。
該当しない管理番号が入力されたらメッセージを表示
検索ボックスに該当しない番号が入力されたら、メッセージを表示して修正を促すようにします。
[検索]ボタンのマクロウィンドウを表示して修正します。
[新しいアクションの追加]で[If]を選択します。
条件式に以下を入力します。テーブル[T_商品]の[管理番号]と[検索ボックス]の番号で一致するものがないという意味になります。
DCount 関数 - Microsoft サポート(Microsoft)
DCount("*","T_商品","[管理番号]=[検索ボックス]")=0
そして、すぐ下の[新しいアクションの追加]で[メッセージボックス]を選択します。
[メッセージ]には、メッセージウィンドウに表示させたい文字列を入力します。ここでは、以下のように入力します。
存在しない管理番号です。確認してください!
[メッセージボックス]の[警告音]、[メッセージの種類]、[メッセージタイトル]などは、任意で設定してください。
ここでは、メッセージの種類を[注意!]にします。
その後、検索ボックスにカーソルを移動して、すぐ修正できるようにします。
[新しいアクションの追加]で[コントロールの移動]を選択して、[コントロール名]に[[検索ボックス]]と入力します。
鍵括弧なしでも動作すると思いますが、念のため入力しておきます。
マクロアクション[If]のブロックを上へ移動します。
そして、[Elseの追加]をクリックします。
[Else]に[フィルターの実行]アクションを追加するために、[フィルターの実行]を選択して[上へ移動]をクリックします。
マクロアクションの順番が以下のようになったことを確認して、上書き保存して閉じます。
参考DCount関数を使って、重複した番号が入力されたらメッセージを出すこともできます。
-
重複データが入力されたらオリジナルのメッセージを表示する
Accessのフォームで受付番号を入力するように作成しています。 受付番号を入力したときに、既に入力済みの番号であればメッセージウィンドウを ...
テーブルやクエリにデータがない場合にも活用できます。
-
テーブル/クエリにレコードが1件もない時にメッセージを表示する
Accessのテーブル/クエリでレコードが1件もない時、そのテーブルを基にして作成したフォームを開こうとする場合は、[データがありません]と ...
動作の確認
[検索ボックス]に該当しない管理番号を入力して、[検索]ボタンをクリックすると、メッセージウィンドウが表示されます。
[OK]ボタンをクリックして閉じると、カーソルは[検索ボックス]に表示されます。
該当する管理番号があれば、該当のレコードが表示されます。
参考もし、[検索ボックス]が空の場合に別のメッセージを表示したいのであれば、[検索]ボタンのクリック時のマクロアクションを以下のように修正します。
[If]の[Else Ifの追加]でアクションを追加します。
入力以外は[Enter]キーで操作できるようにするには
管理番号の入力以外は、[Enter]キーで操作できるように修正します。
[フォームデザイン]タブの[ツール]グループにある[タブオーダー]をクリックします。
[タブオーダー]ダイアログボックスで[フォームヘッダー]を表示します。
先頭に[検索ボックス]がきて、2番目に[検索]、3番目に[解除]があればOKです。
[検索ボックス]に入力して確定後、[Enter]キーを押すと[検索]ボタンが選択された状態になります。
そのまま[Enter]キーを押すと、検索を実行できます。
検索を実行した後は、[解除]ボタンへ移動するように設定します。
[検索]ボタンのクリック時イベントのマクロウィンドウを表示して、修正します。
マクロアクション[フィルターの実行]の後ろの[新しいアクションの追加]で[コントロールの移動]を選択します。
[コントロール名]に[[解除]]と入力します。
これで、[検索]ボタンを[Enter]キーで押して実行した後は、[解除]ボタンへフォーカスが移動します。
参考フォームの[タブオーダー]については、以下の記事で解説しています。
-
フォームのタブオーダーとタブストップの設定
タブオーダーとは、キーボートの[Tab]キーや[Enter]キーを押して、カーソルがフォーム内のコントロールを移動するときの順番のことです。 ...
フォームを表示した時に[検索ボックス]にカーソルがある状態にする
フォーム[F_管理番号検索]を表示した時に[検索ボックス]にカーソルがあると、すぐに入力できるようになります。
[フォーム]のプロパティを表示して、[イベント]タブの[読み込み時]の[ビルダーの選択]ボタン[…]をクリックします。
[ビルダーの選択]ダイアログボックスが表示されたら、[マクロビルダー]を選択します。
[新しいアクションの追加]で[コントロールの移動]を選択して、[コントロール名]に[[検索ボックス]]と入力します。
上書き保存して閉じます。
これで、フォームを開くと、検索ボックスにカーソルが表示されるようになります。
検索時以外はデータを表示しないようにするには
フォームを開いた時にすべてのレコードを表示したくない場合の方法です。
検索時のみ該当レコードを表示して、それ以外はフォームにレコードを表示させないようにします。
フォームのプロパティを表示して、[データ]タブの[フィルター]に[false]と入力し、[読み込み時にフィルターを適用]を[はい]にします。
これで、フォームを表示した時にデータは表示されません。
[解除]ボタンをクリックした時も、データを表示させないようにします。
[解除]ボタンのプロパティを表示して、[イベント]タブのクリック時の[…]をクリックして、再度、マクロウィンドウを表示します。
マクロアクションに[フィルターの実行]を追加します。
[Where条件式]に[False]と入力します。
先頭の[メニューコマンドの実行]を削除します。
マクロアクションが以下のようになったら、上書きして閉じます。
これでフィルターを解除してもデータは表示されなくなります。
[フォームを閉じる]ボタンを設置
あとは、フォームに[閉じる]ボタンを設置すれば、検索用のフォームは完了すると思います。
フォームヘッダーにコマンドボタンを1個挿入します。[名前]と[標題]は[閉じる]にします。
クリック時イベントで[マクロビルダー]を選択します。
マクロアクションで[ウィンドウを閉じる]を選択して、上書きして閉じます。
[オブジェクトの種類]で何も指定しない場合は、アクティブウィンドウが閉じられます。
また、フォームのプロパティで[書式]タブの[閉じるボタン]を[いいえ]にしておくといいと思います。
フォームを開くと以下のようになります。
参考レコードを抽出する方法は、以下の記事も参考になると思います。
-
フォームのコンボボックスの値でレコードを抽出
Accessの分割フォームのデータシートビューには、Excelのフィルターと同じようにフィルターボタンがあり、Excelの操作と同じように様 ...
-
2つのコンボボックスに重複しないデータを表示してレコードを抽出
Accessでコンボボックスを使用してレコードを抽出する方法はいくつかありますが、テーブル内の重複しないデータをコンボボックスに表示して作成 ...
以下の記事ではあいまい検索でレコードを抽出して、抽出したレコード数を自動表示するようにしています。また、あいまい検索でも該当するレコードがない場合は、メッセージを表示する仕組みも解説しています。
-
テキストボックスの文字列でレコードを抽出(マクロビルダーで設定)
Accessでフォームのテキストボックスに入力した文字列でレコードを抽出する方法です。 ここでは、テーブルを基にウィザードを使って表形式のフ ...
検索用のコンボボックスなら、ウィザードで簡単に作成できます。
-
コンボボックス作成ウィザードを使って検索用コンボボックスを簡単作成
Accessのフォームで検索用コンボボックスを作成する方法です。 コンボボックス作成ウィザードを使って簡単に作成することができます。 この記 ...