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

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

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

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

Access

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

3397閲覧

Access * や " を文字列と認識させ、フィルタをかけたい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

Access

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2019/07/23 01:13

編集2019/07/31 01:15

##質問内容
管理システムでマスタのフォームがあるのですが、そのフォームで「*」や「"」で検索をかけれるようにしたいです。

##現状
マスタには、ヘッダーに検索欄として非連結テキストボックスがあり、詳細にサブフォームがあります。

検索欄に条件を入力し、フィルタをかけるようにしてあります。

ちなみに、
「*」は全てという意味で認識され、全レコードがフィルタにかかってしまします。
「"」は全角なら、文字として認識されますが、半角だとおそらくコードの方と混ざってしまい構文エラーになります。

VBA

1'顧客名 2If Nz(Me!Text_CustomerName, "") <> "" Then 3wFilter = wFilter & "and F_CustomerName like ""*" & Text_CustomerName & "*""" 4End If 5 6 With Me!Sub_CustomerMaster.Form 7 .Filter = wFilter 8 .FilterOn = True 9 End With

上記は、例で顧客名の検索条件です。

Like "[]*" のように加えてもみたのですが、うまく動作せずにいます。

わかる方いましたら、アドバイスの方お願いします。

##追記

VBA

1'顧客名 2 3Dim wName As String 4 5wName = Nz(Me!Text_CustomerName, "") 6 7If wName <> "" Then 8 9 wName = Replace(wName, "*", "[*]") 10 wName = Replace(wName, """", "[""]") 11 12 wFilter = wFilter & "and F_CustomerName like '*" & wName & "*'" 13 14End If 15 16 With Me!Sub_CustomerMaster.Form 17 .Filter = wFilter 18 .FilterOn = True 19 End With

##追加質問
シングルクォーテーションでの入力でも、文字列認識させたく同じように下記のコードを書いてみたのですがシングルクォーテーションだけうまく行かないので、わかる方いましたらお願いします。

VBA

1 '住所 2 3 Dim wAddress As String 4 5 wAddress = Nz(Me!Text_Address, "") 6 7 If wAddress <> "" Then 8 9 wAddress = Replace(wAddress, "*", "[*]") 10 11 wAddress = Replace(wAddress, "'", "[']") 12 13 wFilter = wFilter & "and F_Address like '*" & [wAddress] & "*'" 14 15 End If

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記のコードで「*」や「"」でも検索抽出できるのを確認しました。

vba

1 Dim wKeyWord As String 2 Dim wFilter As String 3 4 wKeyWord = Nz(Me.Text_CustomerName.Value, "") 5 If wKeyWord <> "" Then 6 wKeyWord = Replace(wKeyWord , "*", "[*]") 7 wKeyWord = Replace(wKeyWord , """", "[""]") 8 wFilter = wFilter & " And F_CustomerName Like '*" & wKeyWord & "*'" 9 End If 10 11 With Me!Sub_CustomerMaster.Form 12 .Filter = Mid(wFilter , 6) 13 .FilterOn = (.Filter <> "") 14 End With

投稿2019/07/23 02:05

編集2019/07/23 05:10
hatena19

総合スコア33620

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

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

退会済みユーザー

退会済みユーザー

2019/07/23 02:13 編集

顧客名の他に、住所の欄もあるのですが、おなじwKeyWordの変数は使えますでしょうか? それともまた別の変数のほうがよいですか?
退会済みユーザー

退会済みユーザー

2019/07/23 04:22

アスタリスクの方ではコードが通り、動くのですがダブルクォーテーションのほうがまだ構文エラーが出てしまいます。 実行結果は F_CustomerName like "*["]*" です。
hatena19

2019/07/23 04:52

> おなじwKeyWordの変数は使えますでしょうか? 使えます。 > 構文エラーが出てしまいます。 私の回答のコードではエラーなく実行できることを確認しています。 あなたが実際に書いたコードを提示してください。 Accessのコード中での引用符の使い方ですですが、下記で詳しく解説していますので、一度熟読して理解してください。 https://hatenachips.blog.fc2.com/blog-entry-508.html
退会済みユーザー

退会済みユーザー

2019/07/23 04:59

追記いたしました
hatena19

2019/07/23 05:19

追記のコードだと、 and F2 like '*["]*' というような条件式になり、先頭の and が余分なので当然エラーになります。 and を取り除いてください。 wFilter = wFilter & " and F_CustomerName like '*" & wName & "*'" というようにandの前に半角空白を入れておいて、 .Filter = Mid(wFilter, 6) とMid関数で先頭の余分な and を取り除きます。
退会済みユーザー

退会済みユーザー

2019/07/23 06:09

例えば、"ABC" という顧客名があったとき、 「”」で検索したときに、"ABC"のレコードがフィルタでひっかからないという状況です。 ちなみに「*」で検索した場合、*を含むレコードを検索することはできました。
hatena19

2019/07/23 11:26

当方のサンプルでのテストでは引っかかりました。 テスト環境 Windows10HOME Access2019
退会済みユーザー

退会済みユーザー

2019/07/25 02:03

'顧客名 Dim wName As String wName = Nz(Me!Text_CustomerName, "") If wName <> "" Then wName = Replace(wName, "*", "[*]") wFilter = wFilter & "and F_CustomerName like '*" & [wName] & "*'" End If 参考にさせていただき、上記のコードで 半角の「"」、全角の「”」、「*」でのフィルタでうまくいきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問