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

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

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

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

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

7630閲覧

Access フォーム チェックボックスを用いた同一フィールドの複数条件検索について

ryoya_access

総合スコア34

VBA

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

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/10/19 03:50

Access(2007-2016)のフォームで、チェックボックスを用いて同一フィールドを複数条件で検索したいと思っています。

検索条件は以下のチェックボックスです。
検索ボタンを押すと、「月数」フィールドからここでチェックを入れた月数に合致するレコードが抽出されるようにしたいです。
※「月数」フィールドは1月,2月,3月……12月,終了,未登録の14種類からなる短いテキスト型のフィールド
イメージ説明

複数チェックボックスの組み合わせによって条件を分岐するスマートな方法を参考にしようとしたのですが、14つも条件があると分岐の数が2^14=16384ととんでもない数になってしまいます。こういった、チェックボックスによる複数条件検索の分岐が多い場合、どのような検索方法をとるのがスマートなのでしょうか?

※ほかの検索箇所は基本的に以下のようなVBAコードを記述して動かしています。

Private Sub 検索ボタン_Click() Dim strSearch As String '変数の初期化' strSearch = "" If 検索条件1 <> "" Then strSearch = strSearch & "(フィールド名1=" & 検索条件1 & ")" End If If 検索条件2 <> "" Then If strSearch <> "" Then strSearch = strSearch & " AND " strSearch = strSearch & "(フィールド名2='" & 検索条件2 & "')" End If Forms!フォーム名.Filter = strSearch Forms!フォーム.FilterOn = True Forms!フォーム.AllowAdditions = False

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

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

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

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

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

guest

回答1

0

ベストアンサー

一つのフィールドでの条件ですね。

なら、OR演算子ではなく、In演算子を使えば簡単なコードになります。

例えば、1月、3月、10月、終了 にチェックが入っていたら、
月数 In ('1月','3月','10月','終了') というような条件式でOKです。

vba

1Private Sub 検索ボタン_Click() 2 Dim strSearch As String 3 4 If Me.Chk1 = True Then 5 strSearch = strSearch & ",'1月'" 6 End If 7 If Me.Chk2 = True Then 8 strSearch = strSearch & ",'2月'" 9 End If 10 If Me.Chk3 = True Then 11 strSearch = strSearch & ",'3月'" 12 End If 13 14 '中略 15 16 If Me.Chk13 = True Then 17 strSearch = strSearch & ",'終了'" 18 End If 19 If Me.Chk14 = True Then 20 strSearch = strSearch & ",'未登録'" 21 End If 22 23 strSearch = "月数 In (" & Mid(strSearch, 2) & ")" 24 25 With Forms!フォーム名 26 .Filter = strSearch 27 .FilterOn = True 28 .AllowAdditions = False 29 End With 30End Sub

ベタにIf文を繰り返し記述しましたが、チェックボックスの名前がChk1, Chk2, ・・・,Chk14 というように規則的になっていれば For文でまとめることもできます。

For文でまとめるコード例

チェックボックスの名前 Chk1, Chk2, ・・・,Chk14
対応するラベルの名前 Lbl1, Lbl2, ・・・,Lbl14

vba

1Private Sub 検索ボタン_Click() 2 Dim strSearch As String 3 4 Dim i As Long 5 For i = 1 To 12 6 If Me("Chk" & i) = True Then 7 strSearch = strSearch & ",'" & Me("Lbl" & i).Caption & "'" 8 End If 9 Next 10 11 strSearch = "月数 In (" & Mid(strSearch, 2) & ")" 12 13 With Forms!フォーム名 14 .Filter = strSearch 15 .FilterOn = True 16 .AllowAdditions = False 17 End With 18End Sub

投稿2020/10/19 04:19

編集2020/10/19 07:29
hatena19

総合スコア33715

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

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

ryoya_access

2020/10/19 07:20

AccessにはIn演算子というものがあるのですね。ExcelVBAはよく触っていたのですが、Accessは不慣れで困っていたため助かりました。「For文でまとめるコード例」は大変参考になりました。無事実装できました、ありがとうございました。
ryoya_access

2020/10/19 07:23 編集

今後この回答をコピペされる方へ。 Dim i As Long For i = 1 To 12 If Me("Chk" & i) = True Then strSearch = strSearch & "," & Me("Lbl" & i).Caption & "'" End If Next の「strSearch = strSearch & "," & Me("Lbl" & i).Caption & "'"」部分、正しくは「strSearch = strSearch & "," & "'" & Me("Lbl" & i).Caption & "'"」のようでした。 「Me("Lbl" & i).Caption」を囲むシングルクオーテーションが後ろにしかなかったため、一応記載しておきます。
hatena19

2020/10/19 07:27

あっ、間違ってますね。ご指摘ありがとうございます。 回答の方、修正しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問