
アクセス2007で、分割フォームにて、以下のようなコードを搭載したボタン(抽出)を作製しています。
private sub 抽出_Click()
Dim strFilter as string
strFilter = "("
If ka1.Value = True Then strFilter = strFilter & "ka = 1 or "
If ka2.Value = True Then strFilter = strFilter & "ka = 2 or "
If ka3.Value = True Then strFilter = strFilter & "ka = 3 or "
If ka4.Value = True Then strFilter = strFilter & "ka = 4 or "
If ka5.Value = True Then strFilter = strFilter & "ka = 5 or "
strFilter = Left(strFilter, Len(strFilter) - 3) & ") and ( "
If kb1.Value = True Then strFilter = strFilter & "kb = 1 or "
If kb2.Value = True Then strFilter = strFilter & "kb = 2 or "
If kb3.Value = True Then strFilter = strFilter & "kb = 3 or "
If kb4.Value = True Then strFilter = strFilter & "kb = 4 or "
If kb5.Value = True Then strFilter = strFilter & "kb = 5 or "
strFilter = Left(strFilter, Len(strFilter) - 3) & ") "
Me.Filter = strFilter
Me.FilterOn = True
End sub
これを For i = 1 to 5
で簡略化することは可能でしょうか?
チェックボックスka1~ka5、kb1~kb5について、
ka1、kb2がチェックされたらフィールドkaが1でフィールドkbが2のレコードを、
ka1,ka2、kb1,kb2がチェックされたらフィールドkaが1 or 2でフィールドkbが1 or 2のレコードを、
抽出するようにしていますが、実際はチェックボックス・フィールドは
kc、kd、ke、、、、と続いていて、コードがかなり長くなってしまい、そのまま書いたら
エラー(プロパティの設定値が長すぎます)になってしまいました。
もしくは、ka、kb、、、を文字変数にした方がよいのでしょうか?
No.4ベストアンサー
- 回答日時:
No.2です。
> ka、kb、kc は 1~5ですが
> kd、ke は 1~6
> kf は1~10
> のチェックボックスがある場合も対応は可能なのでしょうか?
チェックボックス毎に上限の数を持たせれば良いかと思います。
private sub 抽出_Click()
Dim strFilter As String
Dim strFilterWork As String
Dim iLoop As Integer
Dim jLoop As Integer
Dim chkObjList(5) As String
Dim chkObjCount(5) As Integer
chkObjList(0) = "ka": chkObjCount(0) = 5
chkObjList(1) = "kb": chkObjCount(1) = 5
chkObjList(2) = "kc": chkObjCount(2) = 5
chkObjList(3) = "kd": chkObjCount(3) = 6
chkObjList(4) = "ke": chkObjCount(4) = 6
chkObjList(5) = "kf": chkObjCount(5) = 10
strFilter = ""
For jLoop = 0 To UBound(chkObjList)
strFilterWork = ""
For iLoop = 1 To chkObjCount(jLoop)
If Me(chkObjList(jLoop) & iLoop).Value = True Then
If strFilterWork <> "" Then
strFilterWork = strFilterWork & ","
End If
strFilterWork = strFilterWork & iLoop
End If
Next iLoop
If strFilterWork <> "" Then
If strFilter <> "" Then
strFilter = strFilter & "and "
End If
strFilter = strFilter & chkObjList(jLoop) & " in (" & strFilterWork & ") "
End If
Next jLoop
Me.Filter = strFilter
Me.FilterOn = True
End sub
「Dim chkObjCount(5) As Integer」を追加する形にしちゃってますが、本当は、二次元配列とか使った方がいいかも・・・です。
No.3
- 回答日時:
そういう事です。
なので処理コード変えても解決には至りません。
SQLのIN句が利用できると思います。
これで試してみてください。
とりあえず、最大文字数を手入力するなり算出してみて、その時点でアウトなら別案を考えましょう。
No.2
- 回答日時:
こういうことでしょうか?
private sub 抽出_Click()
Dim strFilter As String
Dim strFilterWork As String
Dim iLoop As Integer
Dim jLoop As Integer
Dim chkObjList(2) As String
chkObjList(0) = "ka"
chkObjList(1) = "kb"
chkObjList(2) = "kc"
strFilter = ""
For jLoop = 0 To UBound(chkObjList)
strFilterWork = ""
For iLoop = 1 To 5
If Me(chkObjList(jLoop) & iLoop).Value = True Then
If strFilterWork <> "" Then
strFilterWork = strFilterWork & ","
End If
strFilterWork = strFilterWork & iLoop
End If
Next iLoop
If strFilterWork <> "" Then
If strFilter <> "" Then
strFilter = strFilter & "and "
End If
strFilter = strFilter & chkObjList(jLoop) & " in (" & strFilterWork & ") "
End If
Next jLoop
Me.Filter = strFilter
Me.FilterOn = True
End sub
ありがとうございます、できました。
ka、kb、kc は 1~5ですが
kd、ke は 1~6
kf は1~10
のチェックボックスがある場合も対応は可能なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
access vbaでフォームを開くと...
-
アクセスで教えてください。 電...
-
docmd.gotorecordを起動するには
-
accessでlaccdbファイルが削除...
-
「テキストデータで送ってくだ...
-
レポートの印刷を一括ではなく...
-
Accessのルックアップ
-
Accessデータベースを開くと同...
-
Access VBA を利用して、フォル...
-
Access DLookup vbaで条件を2件...
-
Accessのテキストボックスの入...
-
ACCESS 長い数字のクエリをする...
-
Access フォーム上のテキストボ...
-
Arduinoで温湿度と時刻を1分ご...
-
Accessのレポートについて
-
Accessフォームの配色テーマを...
-
Accessのクエリの印刷設定
-
Accessデータベースに含まれる...
-
アクセスで、実行時エラー3075 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセス2000でデータ抽出...
-
Accessクエリで特定の行を削除...
-
Access2007でSQLの複数列副問い...
-
Accessのクエリーのゼロデータ...
-
Access クエリで連結する文字...
-
access2019 チェックボックスと...
-
Accessのデータの一部を削除す...
-
アクセスのフィルタ nullにつ...
-
Access Left$関数で全角半角が...
-
SQLのLIKE検索で清音と濁音/半...
-
Access:固定長文字列ファイル...
-
accessで空白の時の抽出
-
accessであるデータを抽出でき...
-
ACCESS クエリ 抽出条件が多い場合
-
access(アクセス):パラメータ...
-
アクセスで任意の件数を抽出す...
-
Accessクエリで年月フィールド...
-
Access からのラベル作成時、一...
-
Accessのクエリで1フィールドの...
-
Accessの外部結合プロパティに...
おすすめ情報