Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


498 / 2272 ツリー ←次へ | 前へ→

【11401】複数条件での抽出について教えて下さい ken 10/1/21(木) 10:45 質問[未読]
【11413】Re:複数条件での抽出について教えて下さい 小僧 10/1/22(金) 11:07 発言[未読]
【11419】Re:複数条件での抽出について教えて下さい ken 10/1/22(金) 13:32 回答[未読]
【11423】Re:複数条件での抽出について教えて下さい 小僧 10/1/22(金) 17:38 発言[未読]
【11426】Re:複数条件での抽出について教えて下さい ken 10/1/25(月) 11:45 回答[未読]
【11429】Re:複数条件での抽出について教えて下さい 小僧 10/1/25(月) 17:08 回答[未読]
【11431】Re:複数条件での抽出について教えて下さい ken 10/1/25(月) 18:34 質問[未読]
【11432】Re:複数条件での抽出について教えて下さい ken 10/1/25(月) 19:05 回答[未読]
【11433】Re:複数条件での抽出について教えて下さい ken 10/1/26(火) 8:57 お礼[未読]

【11401】複数条件での抽出について教えて下さい
質問  ken  - 10/1/21(木) 10:45 -

引用なし
パスワード
   初めて投稿します。

フォームから複数条件での抽出を行いたいと考えているのですが、以下のような条件での抽出は可能でしょうか?

・Field_A、Field_BをANDで抽出(いずれも抽出条件は数種類の定型語句)

・Field_Aの抽出条件はTextAのコンボボックスから1つの語句を選択
・Field_Bの抽出条件はCk1のチェックボックスに応じて複数の語句でOR抽出

Select Case Ck1
 Case 1
  Filter="([Field_A]=" & '"TextA"' &) AND ([Field_B]='語句A' OR '語句B')"
 Case 2
  :

上記のようなFilterを作成したのですが、うまく抽出できませんでした。

ANDとORが混在するような抽出はできないのでしょうか。

【11413】Re:複数条件での抽出について教えて下さい
発言  小僧  - 10/1/22(金) 11:07 -

引用なし
パスワード
   ▼ken さん:
こんにちは。

> Ck1のチェックボックス

> Select Case Ck1
> Case 1
> Case 2

チェックボックスの値で判断する場合は
True(-1) か False(0)で比較する事になると思われます。

ちょっと仕様が解りづらいので整理させて下さい。
Field_A と TextA についての抽出は問題なさそうですので
Field_B の抽出についてお尋ねします。

> Ck1のチェックボックスに応じて複数の語句でOR抽出

Ck1 はチェックボックス名で宜しいでしょうか?
ご提示された文面ですと、チェックボックスが1個に見受けられますが
チェックボックス_1を選択 → 語句Aが抽出対象
チェックボックス_2を選択 → 語句Bが抽出対象



([Field_B]='語句A' OR '語句B')

という様な仕様ではないのでしょうか。

【11419】Re:複数条件での抽出について教えて下さい
回答  ken  - 10/1/22(金) 13:32 -

引用なし
パスワード
   ▼小僧 様:
レスありがとうございます。
>
>> Ck1のチェックボックスに応じて複数の語句でOR抽出
>
>Ck1 はチェックボックス名で宜しいでしょうか?

Ck1はオプショングループの返り値になります。
分かりにくくてすみません。

Field_Bはリストから語句を選択するようになっており、
返り値に応じてリスト内の複数語句でor抽出をしたいと考えています。

これとField_Aの抽出条件でAND抽出を行い、

(Field_Aの抽出条件) AND (Field_Bのor抽出条件)

というようなイメージでレコードの抽出を行いたいと考えています。

【11423】Re:複数条件での抽出について教えて下さい
発言  小僧  - 10/1/22(金) 17:38 -

引用なし
パスワード
   ▼ken さん:
こんにちは。

> Ck1はオプショングループの返り値になります。

オプショングループ上に配置されたチェックボックスは
1つしか選択できないのが仕様です。

> リスト内の複数語句でor抽出をしたい

チェックボックスが複数選べてしまうという事は
オプショングループとチェックボックスが
連動してない事になります。

(チェックボックスのプロパティを開いて
 「データ」のタブに「オプション値」という
 項目があれば連動しています。)

もうちょっと仕様を詳しくご提示願えればと思います。

【11426】Re:複数条件での抽出について教えて下さい
回答  ken  - 10/1/25(月) 11:45 -

引用なし
パスワード
   ▼小僧 様:
 回答が遅くなりました。

オプショングループ内に配置したのはチェックボックスではなくてオプションボタンでした。
すみません。

仕様は下記のようにしています。
Field_A:A〜Dの語句を選択して入力
Field_B:E〜Gの語句を選択して入力
抽出用にフォームヘッダーにField_Aに対応したコンボボックスとFiled_Bの抽出条件を決定するためのオプショングループを配置

返り値が1の場合
(Field_A=コンボボックスで選択した語句) AND (Filed_B=E or G)
返り値が2の場合
(Field_A=コンボボックスで選択した語句) AND (Filed_B=E or F or G)
 ・
 ・
 ・
というような仕様で抽出したいと考えています。

【11429】Re:複数条件での抽出について教えて下さい
回答  小僧  - 10/1/25(月) 17:08 -

引用なし
パスワード
   ▼ken さん:
こんにちは。

> 抽出用にフォームヘッダーに
> Field_Aに対応したコンボボックスと
> Filed_Bの抽出条件を決定するためのオプショングループを配置

かしこまりました。
その様な条件ですと、初めに投稿されたコードで
ほぼ問題ないですね。申し訳ないです。


Option Compare Database
Option Explicit

Const strWordB = "語句B"
Const strWordC = "語句C"
Const strWordD = "語句D"

Sub FormFilter()
Dim strFilter As String

  If Not IsNull(Me.TextA.Value) Then
    strFilter = " AND [Field_A] ='" & Me.TextA.Value & "'"
  End If
  
  Select Case Me.Ck1.Value
    Case 1
      strFilter = strFilter & " AND (" _
                  & "  [Field_B] ='" & strWordB & "'" _
                  & " OR [Field_B] ='" & strWordC & "'" _
                  & ")"
    
    Case 2
      strFilter = strFilter & " AND (" _
                  & "  [Field_B] ='" & strWordB & "'" _
                  & " OR [Field_B] ='" & strWordC & "'" _
                  & " OR [Field_B] ='" & strWordD & "'" _
                  & ")"
    Case Else
        
  End Select

  If strFilter = "" Then
    MsgBox "全件出力"
  Else
    Me.Filter = Mid(strFilter, 5)
    Me.FilterOn = True
  End If

End Sub

の様に記述し、Text_A や Ck1 の更新後処理に

Private Sub TextA_AfterUpdate()
  
  Call FormFilter

End Sub

とする事でお望みの様な動作ができるかと思われます。


※この様な掲示版にご質問される際や
ken さん以外の方がこのAccessをメンテナンスする場合、

> TextAのコンボボックス 
> Ck1はオプショングループ

という命名規則は混乱を招く場合がありますので
元のコントロールが想像しやすい名前に変えておいた方が
無難かもしれません。

以下蛇足です。
Accessが初期で付けるオプショングループ名は「フレーム1」ですが、
これをFrm_Aなどと省略すると「FormA」の略と混同される可能性がある為、
当方は Grp_A の様な命名規則を行っています。

【11431】Re:複数条件での抽出について教えて下さい
質問  ken  - 10/1/25(月) 18:34 -

引用なし
パスワード
   ▼小僧 様:
ありがとうございます。

実際のコードでは別のコントロール名にしています。
投稿するに当たり、分かりやすいようにと思ったのですが、かえって混乱を招くような名前で申し訳ありませんでした。

ちょっと分からないところがあったので教えて下さい。

>    Me.Filter = Mid(strFilter, 5)
>    Me.FilterOn = True

ここで
  Me.filter = strFilter
ではなくてMidステートメントにするのは何故でしょうか?

勉強不足ですみません。

【11432】Re:複数条件での抽出について教えて下さい
回答  ken  - 10/1/25(月) 19:05 -

引用なし
パスワード
   ▼小僧 様:
Midの件、解決しました。

Filed_Aの抽出条件の存在をすっかり忘れていました。
失礼しました。

これから教えて頂いた内容でやってみます。

【11433】Re:複数条件での抽出について教えて下さい
お礼  ken  - 10/1/26(火) 8:57 -

引用なし
パスワード
   ▼小僧 様:
おはようございます。

教えて頂いたコードでうまく抽出ができました。

本当にありがとうございました。

498 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free