
Access2002を使用しています。マクロのフィルタを使って抽出をしたいのですが・・・。
テーブル構造ですが
氏名 備考 備考2
○○ ㋹
×× B ㋹
△△ A ㋹
◆◆ B
というものがあります。
今したいのは 備考と備考2に条件をいれ抽出させたいのですが
どちらにも条件が入るときは抽出されるのですが
どちらか一方にのみ条件を入れた場合うまく抽出できません。
たとえば 備考2 で㋹を抽出とした場合。
氏名 備考 備考2
○○ ㋹
×× B ㋹
△△ A ㋹
上記結果が必要なのですが
氏名 備考 備考2
×× B ㋹
△△ A ㋹
結果はこうなります。
フィルタの条件式は
[テーブル]![備考2] Like IIf([Forms]![フォーム]![検索]=Null,"*","*" & [Forms]![フォーム]![検索] & "*") And [テーブル]![備考] Like IIf([Forms]![フォーム]![備考検索]=Null,"*","*" & [Forms]![フォーム]![備考検索] & "*")
元のテーブルにデータが入力されていないものが抽出で出てきません。
どーしたらよいのでしょうか??教えてください。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
#5です
(なにも反応ありませんが、どうしたのでしょうか)
補足の補足です)
> ボタンクリック時、マクロのフィルタの実行で、Where条件式に
> [備考] Like "*" & [Forms]![フォーム]![検索] & "*"
> を記述すると、VBAで以下の記述と同じことになります。
> Private Sub ボタン_Click()
> Me.Filter = "[備考] like '*' & [Forms]![フォーム]![検索] & '*'"
> Me.FilterOn = True
> End Sub
上記、はしょって記述しました。
マクロのフィルタの実行は、実際には
DoCmd 系の ApplyFilter に変換されるようですが、その処理の主は上記だと思っています。
また同様に DoCmd 系に ShowAllRecords があって、フィルタ解除できますが
ApplyFilter と同様に Me.Filter / Me.FilterOn を操作するものと、私は解釈しています。
(ここでの DoCmd 系は、一段皮をかぶった関数でしょうか)
Me.Filter に直接設定した方が良いのか、 ApplyFilter を使うべきか悩むところです。
あえて、 ApplyFilter を使用する例として、以下が参考になります。
(私は Me.Filter ばかり使ってますが)
なお、マクロの条件式に記述できるのは255バイトと2007のヘルプには記述されていました。
255文字なのかもしれませんが、#1での記述は LenB でバイト数を求めると 352 バイトになります。
VBA の記述にトライされてみてはいかがでしょうか。
※ 私がフィルタに記述する時に注意していること
SQL の Where句の記述ができるとヘルプ等に書いてますが、BETWEEN は使わないようにしてます。
単純なものでは動くけど、条件が複数になると動かないなど、いい目見てないので。
その時には、○○ BETWEEN XX AND YY を ○○ >= XX AND ○○ <= YY に変更したり。
単純な比較演算子のものを AND / OR でつなげていくことをします。
(前述したようにコントロールの参照ではなく、即値を利用した内容で)
(伝わりましたでしょうか)
No.5
- 回答日時:
#3です
補足:ちょっと動きを見てみました 2007)
[Forms]![フォーム]![検索]
のようにフォームのコントロールを参照する書き方で、文字列として指定する場合、
私はクエリ以外で成功したことがありません。
(私の書き方の問題でしょうが、初めの1回だけ動いて後は変化なし、などなど)
マクロは(ほとんど)使わないので、VBAにて内容を展開して即値で指定するようにしています。
(条件には必要なものだけを指定するようにしながら)
★私ができなかったこと:文字列として指定する記述)
ボタンクリック時、マクロのフィルタの実行で、Where条件式に
[備考] Like "*" & [Forms]![フォーム]![検索] & "*"
を記述すると、VBAで以下の記述と同じことになります。
Private Sub ボタン_Click()
Me.Filter = "[備考] like '*' & [Forms]![フォーム]![検索] & '*'"
Me.FilterOn = True
End Sub
で、これを実行すると、初めの1回だけ動きます。
(その時の[検索]内容が記憶されるようです)
他のボタンで条件変更し動作した後に、上記ボタンをクリックすると
初めに動作した時の状態に戻ってしまいました。
なので、私は文字列として指定しないようにしています。
(実は今回の検証でも動かせてません)
★必要な分だけを、内容を展開して指定する記述例)
Private Sub ボタン_Click()
Dim sWhere As String
Const OrAnd = " AND "
sWhere = ""
If (Len(Nz(Me.検索)) > 0) Then
sWhere = sWhere & OrAnd & "[備考] Like '*" & Trim(Me.検索) & "*'"
End If
If (Len(Nz(Me.備考検索)) > 0) Then
sWhere = sWhere & OrAnd & "[備考2] Like '*" & Trim(Me.備考検索) & "*'"
End If
If (Len(sWhere) > 0) Then
Me.Filter = Mid(sWhere, Len(OrAnd) + 1)
Me.FilterOn = True
Else
Me.FilterOn = False
Me.Filter = ""
End If
End Sub
条件を記述する場合、文字列先頭に必ず OrAnd を付加します。
条件がどちらか1つであろうが、複数であろうが、
条件ありの場合は、先頭の OrAnd を除いた分を条件設定します。
初めの記述で
sWhere = sWhere &・・・
にしているのは、条件判別/記述順番を入れ変えたり、条件を追加したりした際の変更を少なく
程度のものです。
参考になれば、、程度のものです。
No.4
- 回答日時:
No.2です。
> ここで、[備考] Like '*' の条件を記述すると
> rs!備考 = Null 以外のものが抽出対象となります。
失礼しました、確かにその通りです。
(「DCount("*","テーブル")」の第1引数での「*」の場合と
記憶がごっちゃになってしまっていたようです)
以前の回答では、それも踏まえて回答していたはずだったのですが・・・(汗)
http://oshiete1.goo.ne.jp/qa5108301.html
No.3
- 回答日時:
#1です。
> 消えるデータの備考部分が、NULLなのでしょう。
部分について説明を。
「備考」が、
値要求:いいえ
空文字列の許可:はい
で、作られていた場合、
rs!備考 = Null
rs!備考 = ""
rs!備考 = "ABC"
上記どれでも、データを設定できます。
ここで、[備考] Like '*' の条件を記述すると
rs!備考 = Null 以外のものが抽出対象となります。
(クエリに記述しても Filter に記述しても)
値要求:いいえ の場合は、レコード追加時に、備考に値を設定しないと Null になります。
また、編集操作時に表示されている文字列を選択して、DELキーで削除した時など Null になります。
値が Null のものを含む全てを抽出するためには、条件を記述しないことです。
(#1での書き方になります)
※ #2の方のは、抽出文字列を記述する部分に着目されたものと思います。
※※ 私の環境ではそうです。
No.2
- 回答日時:
> 元のテーブルにデータが入力されていないものが抽出で出てきません。
こちらで作成したサンプルでは、提示された条件式で、『備考』が空白の
ものも抽出されました。
(但し、Nullかどうかの判定には、No.1の方の回答にもある、IsNull関数を
使用する必要があります:
http://oshiete1.goo.ne.jp/qa4850675.html )
なので、sachi_1981さんが実際に扱っているAccessファイルでの式と、
サンプルとして提示された式とではどこかが違っている、という可能性が
考えられます。
提示された式は、実は以下のように簡素化できますので、まずは実際の
ファイルで使用している式を同様に書き換えて、想定しているものと食い
違いがないか、見直してみられることをお勧めします。
(なお、修正後の式では、「備考」「備考2」の条件の指定順を、提示
テーブルのフィールドと同じにしました)
<現在>
[テーブル]![備考2] Like IIf([Forms]![フォーム]![検索]=Null,"*","*" & [Forms]![フォーム]![検索] & "*") And [テーブル]![備考] Like IIf([Forms]![フォーム]![備考検索]=Null,"*","*" & [Forms]![フォーム]![備考検索] & "*")
<修正後・1(レコードソースで、フィールド名が重複する場合)>
[テーブル].[備考] Like "*" & [Forms]![フォーム]![備考検索] & "*" And [テーブル].[備考2] Like "*" & [Forms]![フォーム]![検索] & "*"
<修正後・2(レコードソースで、フィールド名が重複しない場合)>
[備考] Like "*" & [Forms]![フォーム]![備考検索] & "*" And [備考2] Like "*" & [Forms]![フォーム]![検索] & "*"
※レコードソースにテーブルを直接指定している場合は、こちらでOkです。
【補足説明】
IIF関数で「Nullでなかった場合」に指定している式
"*" & [Forms]![フォーム]![検索] & "*"
ですが、これは、『検索』テキストボックスがNullの場合、
**
という結果になります。
これは「Nullだった場合」に指定している「*」と実質的に同じですので、
「Nullかどうか」の判定を省略できる、ということです。
No.1
- 回答日時:
消えるデータの備考部分が、NULLなのでしょう。
書き方を変えます。(未検証)
IIf([Forms]![フォーム]![検索]=Null,True,[テーブル]![備考2] Like "*" & [Forms]![フォーム]![検索] & "*") And IIf([Forms]![フォーム]![備考検索]=Null,True,[テーブル]![備考] Like "*" & [Forms]![フォーム]![備考検索] & "*")
でどうなりますか。
※
[Forms]![フォーム]![検索]=Null
部分は動いているようですが
IsNull([Forms]![フォーム]![検索])
を私はよく使います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで同フォルダ内の別ブックを開かず参照して条件の一致する行の指定セルを抽出するには? 1 2022/07/21 19:29
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(プログラミング・Web制作) google formsで回答者をスプレッドシートに記載する方法 1 2023/06/23 11:22
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Access(アクセス) Access 複数条件検索の設定が上手く行きません 1 2022/07/22 20:37
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Excel(エクセル) エクセルの関数を教えてください。② 9 2023/05/25 15:28
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
AccessでIDを入力したら他の項...
-
年齢の検索
-
クエリ実行結果0件の場合のフ...
-
クエリーの結果をフォームに表...
-
AccessでログインIDを抽出条件...
-
エクセルで、抽出したデータだ...
-
Access サブフォームでの選択行...
-
前のレコードの値を自動で入れたい
-
ExcelのComboboxでマウスのスク...
-
(ACCESS)条件に応じて、テキ...
-
Accessでレコードの複製
-
Excel 文字列から6桁の数値の抽出
-
ACCESS 複数のフォームから同一...
-
【AccessVBA】レコードセットOp...
-
accessでオートナンバーを使わ...
-
ACCESSのクエリー抽出条件にIIF...
-
access2007 コンボボックスでの...
-
access別のテーブルを参照して...
-
ACCSESS2013VBA フォームのレコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
AccessでIDを入力したら他の項...
-
ACCESSで、EXCELのような、sumi...
-
クエリ実行結果0件の場合のフ...
-
Accessでフィルタの実行アクシ...
-
ACCESS2003のグループ化のエラ...
-
ACCESS2007 マクロ クエリのパ...
-
ACCESS フォームで抽出したデー...
-
Access 抽出したフォームをフ...
-
フォームからクエリの抽出期間...
-
サブフォームを利用したクエリ...
-
クエリーの結果をフォームに表...
-
ACCESSで、フォームで抽出した...
-
ADOレコードセットのコピー
-
Accessクエリの抽出条件にフォ...
-
VarChar型をINT型に変換するには
-
アクセスのクエリーで抽出方法
-
(続き)accessでの2段階クエリの...
-
アクセス2007 フォームフィル...
-
アクセス2003のカレンダー...
おすすめ情報