質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

2回答

2669閲覧

ACCESS 分割フォーム テキストボックスから抽出する設定

YISS

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/11/18 08:18

編集2020/11/20 05:36

Accessにて、下記画像の様なデータベースのレコードを修正するフォームを作成しています。

イメージ説明

【やりたいこと】
1.
フォーム上部左側にて、キーワードを入力
⇒検索ボタンを押す
⇒フォーム下部のデータシートで、指定したフィールド内にキーワードを含むレコードだけが表示されるようにする

検索ボタンのコードを下記の様に書いてみたのですが、
結果は、
データシートに、検索用テキストボックスのラベル名のフィールドへ、検索用テキストボックスの値が登録され、
その後、パラメータの入力 というウィンドウが出てきてしまいます。
コードをどのように修正したら、本来やりたいことになるでしょうか?

コード

Private Sub btn_fix_2_Click() Me.Filter = "Use_Place like'*" & Use_Place_key & "*'" Me.FilterOn = True Me.Filter = "Class_1 like'*" & Class_1_key & "*'" Me.FilterOn = True Me.Filter = "Class_2 like'*" & Class_2_key & "*'" Me.FilterOn = True  ''~省略~ End Sub

2.
検索用にテキストボックスを追加したら、フォーム下部のデータシートに、
検索用テキストボックスのラベル名のフィールドが追加されていました。
追加されないようにする、
又は、上記方法で検索できた場合、
シートの1番左のフィールドが、常に表示(選択)されるようにする方法はありますでしょうか?

ExcelVBAはある程度理解していますが、ACCESSは初心者です。
基礎的なことも知らないことありますが、ご教授よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2020/11/18 08:33

まず用語を正確にしましょう。 > フォーム上部左側にて、キーワードを入力 > ⇒フォーム下部のデータシートに、キーワードが含むレコードがソートされる ソートというのは並べ替えという意味ですか、どのように並べ替えしたいのですか。 質問タイトルでは検索となんてますが、検索(該当レコードへ移動)したいのですか。 意味が異なりますので、やりたいことを正確に表現するように修正してください。 > シートの選択されたレコードが常に一番左の列が表示(選択)されるようにする方法はありますでしょうか? レコードというのはExcelでいう行にあたります。列というのはアクセスではフィールドです。 「選択されたレコードが常に一番左の列が表示(選択)される」とは意味不明です。 日本語としてもおかいしです。正確に伝わるように修正してください。
YISS

2020/11/18 09:23

ご指摘ありがとうございます。 質問文を修正してみましたので、ご確認をお願いいたします。
guest

回答2

0

ベストアンサー

質問の修正ありがとうございます。
まだ、不明な点はありますが概要はつかめました。

まず、今回のような要件の場合、分割フォームは使いづらいと思います。

メインフォーム上にデータシートビューをサブフォームとして埋め込んだ方がいろいろ融通が利くと思います。
例えば分割フォームだと単票フォームの方に非連結のテキストボックス(検索用)を配置するとそれも表示されてしまいますが、メイン/サブフォーム形式だとそのようことはありません。

検索用テキストボックスをフォームヘッダーに配置する形にすれば分割フォームでもデータシート側にそれが表示されることはなくなります。ただし、
検索用テキストボックスと修正用テキストボックスのレイアウトが上下になるので質問で提示のレイアウトに拘るなら分割フォームは無理です。

メイン/サブフォーム形式で行くか、分割フォームて検索テキストボックスはフォームヘッダーに配置するか、どちらにするかまずは決めてください。それが決まったらそれに沿って回答したいと思います。


メイン/サブフォーム形式で行きたいとのコメントがありましたので、それで回答します。

まず、テーブルをレコードソースとする単票フォームを作成します。詳細セクションに、検索用テキストボックス(非連結)とフィールドと連結したテキストボックスを配置します。
あるいは、現状の分割フォームの「既定のビュー」を「単票フォーム」にしてもいいです。デザインを変更しないのならその方か早いですね。

同じテーブルをレコードソースとするデータシート形式のフォームを作成します。(フォームウィザードで簡単に作成できます。)保存して閉じます。

前記の単票フォームをデザインビューで開いて、上記のデータシート形式フォームを詳細セクションにドロップします。これでサブフォームとして埋め込まれます。
サブフォームコントロールの「リンク親フィールド」「リンク子フィールド」が自動で設定される場合がありますので、設定されていたら削除します。
サブフォームコントロールの幅をメインフォームの幅一杯に広げます。また、サブフォームコントロールの下に隙間がないように詳細セクションの高さを縮小します。
サブフォームコントロールの「水平アンカー」「垂直アンカー」をどちらも「両方」に設定します。
これで見た目は分割フォームとほぼ同じになります。

あとは検索用コマンドボタンを配置します。名前は、btn_fix_2 とします。
(標題は「検索」より「抽出」の方がやりたい処理を的確に表していると思います。)

あとは抽出解除用のコマンドボタンも配置します。名前は cmd_Filter_Clear とします。

フォームモジュールのコードを下記のように記述します。

vba

1Option Compare Database 2Option Explicit 3 4Private Sub Form_Open(Cancel As Integer) 5 Set Me.SF1.Form.Recordset = Me.Recordset 6End Sub 7 8Private Sub btn_fix_2_Click() 9 Dim strFilter As String 10 If Me.txtF1 <> "" Then 11 strFilter = strFilter & " And F1 Like '*" & Me.txtF1 & "*'" 12 End If 13 If Me.txtF2 <> "" Then 14 strFilter = strFilter & " And F2 Like '*" & Me.txtF2 & "*'" 15 End If 16 If Me.txtF3 <> "" Then 17 strFilter = strFilter & " And F3 Like '*" & Me.txtF3 & "*'" 18 End If 19 Me.Filter = Mid(strFilter, 5) 20 Me.FilterOn = strFilter <> "" 21 Set Me.SF1.Form.Recordset = Me.Recordset 22End Sub 23 24Private Sub cmd_Filter_Clear_Click() 25 Me.txtF1 = "" 26 Me.txtF2 = "" 27 Me.txtF3 = "" 28 Me.Filter = "" 29 Me.FilterOn = False 30 Set Me.SF1.Form.Recordset = Me.Recordset 31End Sub

サブフォームコントロール名 SF1
テーブルのフィールド名 F1, F2, F3
検索用テキストボックス名 txtF1, txtF2, txtF3
と仮定したコードですので、実際の名前に合わせ変更してください。

投稿2020/11/19 05:27

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YISS

2020/11/20 00:00

おはようございます。 具体的に、ご説明ありがとうございます。 教えて頂いた通りで完成することができました!
guest

0

質問の修正ありがとうございます。
まだ、不明な点はありますが概要はつかめました。

まず、今回のような要件の場合、分割フォームは使いづらいと思います。

メインフォーム上にデータシートビューをサブフォームとして埋め込んだ方がいろいろ融通が利くと思います。
例えば分割フォームだと単票フォームの方に非連結のテキストボックス(検索用)を配置するとそれも表示されてしまいますが、メイン/サブフォーム形式だとそのようことはありません。

検索用テキストボックスをフォームヘッダーに配置する形にすれば分割フォームでもデータシート側にそれが表示されることはなくなります。ただし、
検索用テキストボックスと修正用テキストボックスのレイアウトが上下になるので質問で提示のレイアウトに拘るなら分割フォームは無理です。

メイン/サブフォーム形式で行くか、分割フォームて検索テキストボックスはフォームヘッダーに配置するか、どちらにするかまずは決めてください。それが決まったらそれに沿って回答したいと思います。

投稿2020/11/18 09:58

編集2020/11/18 10:13
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YISS

2020/11/19 03:05

ご提案ありがとうございます。 サブフォームという選択肢を知らなかったので、自分でも調べてみました。 今回、メイン/サブフォーム形式で進めていきたいと思います。
hatena19

2020/11/19 05:29

回答を修正するつもりが、新規に回答してしまいました。そちらを参照ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問