|
>フォームで使用する部分のみ書いてみましたが、足りなかったみたいですね。
「コード1〜3」の各テキストボックスの名前は書いてありましたが、
それらのフィールド名が書いてなかったので、お尋ねしたんです。
>>>>>顧客名 コード1 コード2 コード3
>>>>>A社 11 12 (ブランク)
>>>>>B社 12 14 15
>>>>>C社 13 14 15
>>>>>
>>>>>というデータがあり、検索コードに12を入れボタンを押すと、
>>>>>
>>>>>顧客名 コード1 コード2 コード3
>>>>>A社 11 12 (ブランク)
>>>>>B社 12 14 15
>>>>>
>>>>>と、C社が抽出されないようなVBAがありましたら教えていただけないでしょうか。
前回(12672)でも触れましたが、
フォームの Filter プロパティと FilterOn プロパティを使います。
上例で言えば、
「コード1」フィールドが12であるか、
又は「コード2」フィールドが12であるか、
又は「コード3」フィールドが12である
レコードを抽出することになります。
これを条件式に表すと
コード1 = 12 OR コード2 = 12 OR コード3 = 12
となります。
この文字列を Filter プロパティに代入します。
上記の条件式の「12」という値ですが、「検索コード」テキストボックスの値を使うわけですよね。
なので、「検索コード」テキストボックスを使って、
上記条件式のような文字列を生成する必要があります。
「検索コード」テキストボックスに15という値が入力されているとし、
strWhereがString型の変数だとすると、
strWhere = "コード1 = " & Nz(検索コード.Value,0)
というコードを実行すると、strWhereに「コード1 = 15」という文字列が格納されます。
「Nz(検索コード.Value,0)」の部分をダブルコーテーションで囲われたものの外に出す
という点がポイントです。
strWhere の後に文字列をつなげたければ、上記のコードに続けて
strWhere = strWhere & " AND "
というコードを実行すれば、strWhere には「コード1 = 15 AND 」という文字列が格納されます。
それから、半角スペースも重要な意味を持っています。
半角スペースを省いてしまったり、
半角スペースを入れるべきところに全角スペースを入れたりすると、
エラーになります。
Filter プロパティに値を設定したら、FilterOn プロパティに True を設定しないと、
フィルタは効きません。
以下は蛇足です。
「T顧客名」の作り方が間違っているように思います。
というのは、「コード1」「コード2」「コード3」というフィールド名だからです。
エクセルの場合、ワークシートにおける列の項目名として「氏名1」「氏名2」「氏名3」
というようにすることが少なくありません。
しかし、データベースの場合、そのようなフィールド名を付けた場合、テーブル設計として
誤っていることが少なくありません。
ことに、「氏名2」の値と「氏名3」の値とが入れ替わっても、大した違いはない
というのであれば、テーブル設計は確実に誤りです。
この場合、コード1〜3の各フィールドをT顧客名から外し、
新たに「Tコード」というテーブルを作ります。
フィールドは、
コードID 長整数型又はオートナンバー (主キー)
顧客番号 テキスト型
コード番 数値型 (「コード2」の2を格納する。このフィールドはなくてもよい)
コード 数値型
となると思います。
T顧客とは、顧客番号で結合させます。
なぜこういうテーブル構成にするのかというと、OR検索は、AND検索に比べて遅いからです。
コード1〜3を一つのフィールドにしてしまえば、OR検索をしなくて済むので、
迅速な処理ができるようになります。
つまり、処理方法や計算方法に合わせてテーブルを作るわけです。
なお、ここがアクセスとエクセルの違いの一つです。
エクセルでは、まず表を作り、表に合わせて処理方法や計算方法を考えるのに対し、
アクセスでは、処理方法や計算方法に合わせてテーブルを作ります。
それから、T事業所コード1〜3の各テーブルですが、格納されているデータが3テーブルとも
同じなのではないですか。
もしそうであれば、T事業所コード2及び3の各テーブルは不要だと思います。
というより、T事業所コード2及び3みたいなテーブルは作ってはいけません。
同じデータを複数のところに格納することは、データベースでは御法度です(一事実一箇所の原則)。
では、どう対応するかですが、
クエリのデザインビューで、マウスを右クリックをし、「テーブルの表示」を選択します。
「テーブルの表示」フォームから「T事業所コード1」を2回追加します。
そうすると、デザインビューに「T事業所コード1」「T事業所コード1_1」「T事業所コード1_2」
というテーブルが表示されるはずです。
あとは、これらを使ってクエリを作ります。
「T事業所コード1_1」「T事業所コード1_2」の実体は、「T事業所コード1」です。
一つのテーブルを、名前を変えて使い回すわけです。
とはいえ、コード1〜3を一つのフィールドにしてしまえば、T事業所コード1〜3の問題は
出てこないことになるんですけどね。
|
|