search

Accessフォームのヘッダー部に検索ボックスを追加して、効率的なデータ検索を実現する方法

Accessフォームのヘッダー部に検索ボックスを追加して、効率的なデータ検索を実現する方法

既存フォームのヘッダー部に検索BOXのようなものを接設置したいです。http://support.microsoft.com/kb/879980/ja 中段 12.表示位置を調整します。 のところにある画像のように作りたいです。 ですがこの方法のまま作ると 上段 ここでは例として~ 「[得意先] テーブルを元に」~ となっており[得意先] テーブルとリレーションシップでつないだもう1つのテーブルから作ったクエリを元に作ることができません。 例 [得意先]テーブル 得意先CD/会社名/担当者CD 001/A社/101 002/B社/101 [担当者]テーブル 担当者CD/担当者名 101/山田 102/加藤 これをリレーションシップでつないで [得意先]クエリ 得意先CD/会社名/担当者CD/担当者名 001/A社/101/山田 002/B社/101/山田 と表示させます。 実際には会社名フィールドに[ 会社名入力 ] で パラメータの入力ができるようになっています。 それから[得意先]クエリから単票形式で[得意先]フォームを作っています この[得意先]フォームヘッダー部に検索BOX(パラメータの入力と同じ効力を持つもの)を作りたいのです。 しかしサポートの方法だと[得意先]テーブルから作らないといけないので作ったフォームが 得意先CD/会社名/担当者CD 001/A社/101 ※パラメータの入力にA社と入力した場合 となって担当者名が表示されなくなってしまします。 フォームを閉じて、再度パラメータの入力をしなくて連続で検索できるように検索BOXを作りたかったのですが担当者名が表示されないので使い物にならない。 強引に[得意先]テーブルではなく[得意先]クエリから同じ方法を試すも 9.表示する値の種類を選択します。のところの [コンボボックスで選択した値に対応するレコードをフォームで検索する] という表示が されないため(上の2つしか選択できな)ここでどうすればいいのか分からなくなっております。 説明不足で申し訳ありませんがこの説明で私がしたいことがお分かりになる方ぜひ教えてください。

Accessデータベースで、既存フォームのヘッダー部に検索ボックスを追加して、クエリ結果に基づいたデータ表示をスムーズに行いたい、というご相談ですね。 現状では、[得意先]テーブルと[担当者]テーブルを関連付けて作成したクエリからフォームを作成しているにも関わらず、ヘッダー部の検索ボックスで会社名を入力すると担当者名が消えてしまう、という問題にお困りのようです。 これは、検索ボックスの設定方法と、フォームのデータソースの組み合わせに原因があると考えられます。 本記事では、Accessフォームのヘッダー部に効率的な検索ボックスを実装する方法を、具体的な手順と解説と共にご紹介します。 特に、リレーションシップのある複数のテーブルからデータを取得するクエリをデータソースとするフォームへの対応に焦点を当てて説明します。

問題点の整理と解決策

ご質問を整理すると、以下の2点が課題となっています。

  • 課題1:Microsoftサポートの方法はテーブルをデータソースとすることを前提としており、クエリをデータソースとする場合に適用できない。
  • 課題2:検索ボックスによる検索後も、関連テーブルのデータ(担当者名)を継続して表示させたい。

これらの課題を解決するために、以下の方法を提案します。

  • 解決策:フォームのデータソースとしてクエリを使用し、検索ボックスには「フィルター」機能を利用する。

Microsoftサポートの方法は、直接テーブルをデータソースとする場合に有効です。しかし、あなたのケースでは、複数のテーブルを関連付けたクエリをデータソースとしています。そのため、直接テーブルを操作する方法は適用できません。代わりに、フォームにフィルター機能を追加することで、クエリ結果を動的に絞り込むことができます。これにより、検索ボックスで会社名を入力しても、関連する担当者名が消えることなく表示されます。

具体的な手順

以下に、Accessフォームのヘッダー部に検索ボックスを追加し、クエリ結果をフィルターする手順を詳細に説明します。

1. フォームのデザインビューを開く

問題のフォームをAccessで開き、デザインビューに切り替えます。

2. テキストボックスを追加する

フォームのヘッダー部にテキストボックスを追加します。このテキストボックスが検索ボックスになります。テキストボックスのプロパティで、名前を「検索ボックス」など分かりやすい名前に変更します。

3. イベントプロパティを設定する

テキストボックスのプロパティシートを開き、「イベント」タブを選択します。「変更」イベントに以下のVBAコードを入力します。


Private Sub 検索ボックス_AfterUpdate()
  Dim strFilter As String

  ' 検索条件を作成
  strFilter = "[会社名] Like '*" & Me.検索ボックス & "*'"

  ' フォームのフィルターを設定
  Me.Filter = strFilter
  Me.FilterOn = True

End Sub

このコードは、テキストボックスの値が変更されるたびに実行されます。`strFilter`変数に、会社名フィールドを対象としたLike演算子を使った検索条件を作成し、フォームの`Filter`プロパティに設定することで、フォームの表示内容を絞り込みます。`Me.FilterOn = True`でフィルターを有効化します。

4. クリアボタンの追加(オプション)

検索結果をクリアするためのボタンを追加することをお勧めします。ボタンに以下のVBAコードを入力します。


Private Sub クリアボタン_Click()
  Me.FilterOn = False
  Me.検索ボックス = ""
End Sub

このコードは、ボタンがクリックされた際にフィルターを解除し、検索ボックスをクリアします。

5. 実行とテスト

フォームを閉じ、再度開いて検索ボックスに会社名を入力して検索してみてください。関連する担当者情報が表示されたことを確認します。もし、意図した結果が得られない場合は、VBAコードの`[会社名]`部分を、クエリで使用している実際の会社名フィールド名に修正してください。また、大文字と小文字を区別しない検索を行うには、`Like`演算子の代わりに`Like “*” & UCase(Me.検索ボックス) & “*”`を使用することもできます。

より高度な検索機能の実装

さらに高度な検索機能を実装したい場合は、複数の検索条件を組み合わせたり、検索条件を指定するためのコンボボックスを追加するなど、VBAコードを拡張することができます。例えば、会社名だけでなく、担当者名でも検索できるように拡張したい場合は、以下の様なコードに変更できます。


Private Sub 検索ボックス_AfterUpdate()
  Dim strFilter As String
  Dim strCompanyFilter As String
  Dim strStaffFilter As String

  ' 会社名検索条件
  strCompanyFilter = ""
  If Me.検索ボックス <> "" Then
    strCompanyFilter = "[会社名] Like '*" & Me.検索ボックス & "*'"
  End If

  ' 担当者名検索条件 (コンボボックスを追加した場合)
  strStaffFilter = ""
  If Me.担当者コンボボックス.Value <> "" Then
      strStaffFilter = "[担当者名] = '" & Me.担当者コンボボックス.Value & "'"
  End If

  ' 検索条件を組み合わせる
  If strCompanyFilter <> "" And strStaffFilter <> "" Then
      strFilter = strCompanyFilter & " AND " & strStaffFilter
  ElseIf strCompanyFilter <> "" Then
      strFilter = strCompanyFilter
  ElseIf strStaffFilter <> "" Then
      strFilter = strStaffFilter
  Else
      strFilter = ""
  End If

  ' フォームのフィルターを設定
  Me.Filter = strFilter
  Me.FilterOn = (strFilter <> "")

End Sub

この例では、会社名と担当者名の両方を検索条件として使用できるように拡張しています。担当者名検索にはコンボボックスを使用することを想定しています。必要に応じて、コードを修正して、あなたのデータベース構造に合わせましょう。

Accessデータベースの操作でお困りのあなたへ

この記事では一般的な解決策を提示しましたが、あなたのAccessデータベースは独自の設定や複雑な構造をしているかもしれません。
AIキャリアパートナー「あかりちゃん」が、LINEであなたのAccessに関する悩みをリアルタイムに聞き、具体的な解決策までサポートします。Accessの専門家ではない方にも分かりやすく丁寧に説明しますのでご安心ください。

今すぐLINEで「あかりちゃん」に無料相談する

無理な勧誘は一切ありません。まずは話を聞いてもらうだけでも、心が軽くなるはずです。

まとめ

Accessフォームのヘッダー部に検索ボックスを追加して、クエリ結果に基づいた効率的なデータ検索を実現するには、フォームのフィルター機能をVBAコードで制御することが有効です。 本記事で紹介した手順に従うことで、リレーションシップのある複数のテーブルからデータを取得するクエリをデータソースとするフォームでも、検索ボックスによる検索後も関連テーブルのデータが継続して表示されるようになります。 より高度な検索機能が必要な場合は、VBAコードを拡張することで、柔軟な検索を実現できます。 Access操作に自信がない場合は、専門家への相談も検討しましょう。

コメント一覧(0)

コメントする

お役立ちコンテンツ