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

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

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

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

Access

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

963閲覧

AccessVBA検索フォームについて

yazu-0809

総合スコア6

VBA

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

Access

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/04/13 15:28

編集2021/04/14 10:06

前提・実現したいこと

accessで検索フォームを作っています。
すべて含むもしくは一部含むような検索フォームです。

発生している問題・エラーメッセージ

商品コード開始と終了の部分がエラーが起きてしまい、いくつか調べてためしてみたましたが、解決しません。
やりたいことは商品コードはテキスト型で数字のみです。(頭に0がつくため)
検索できるようクエリを作ってそれをもとに検索しています。
要望として「商品コード開始」と「商品コード終了」の項目には「商品コード開始」のみに入力されていても検索ができるように
または「商品コード開始」と「商品コード終了」を入れるとその範囲内のコードが表示されるようにしたいです。いくら調べて、考えても解決できませんでした。

追記:商品コードの開始と終了は解決しました。ありがとうございます。ただ年月度を入れると検索ができなくなってしまったのですが、
この場合年月度はテキスト型なので同じようにしたのでは間違いになるのでしょうか。
会社の要望としては年月度だけでの検索もできるようにしたいし、年月度と商品コード、担当者などをいれても検索が動くようにしてほしいということなのですが、別に作ったほうが良いのでしょうか?それとも年月度はあきらめてもらうほうがいいのでしょうか。
ちなみに元となっているテーブルはCSVからデータを読み込む関係ですべてテキスト型になっています。

該当のソースコード

AccessVBA

1 2 If Not IsNull(Me.開始年月度) And Not IsNull(Me.終了年月度) Then 3strFilter = " AND 年月度 >= '" & Me.開始年月度 & "' AND 年月度 <= '" & Me.終了年月度 & "'" 4ElseIf Not IsNull(Me.開始年月度) Then 5strFilter = " AND 年月度 = '" & Me.開始年月度 & "'" 6End If 7 8 If Not IsNull(Me.tx請求先名) Then 9 strFilter = strFilter & " AND 請求先名 Like '*" & Me.tx請求先名 & "*'" 10 End If 11 12 If Not IsNull(Me.得意先名) Then 13 strFilter = strFilter & " AND 得意先名1 Like '*" & Me.得意先名 & "*'" 14 End If 15 16 If Not IsNull(Me.商品コード開始) And Not IsNull(Me.商品コード終了) Then 17strFilter = " AND 商品コード >= '" & Me.商品コード開始 & "' AND 商品コード <= '" & Me.商品コード終了 & "'" 18ElseIf Not IsNull(Me.商品コード開始) Then 19strFilter = " AND 商品コード = '" & Me.商品コード開始 & "'" 20End If 21 22 23 If Not IsNull(Me.tx商品名) Then 24 strFilter = strFilter & " AND 商品名 Like '*" & Me.tx商品名 & "*'" 25 End If 26 27 If Not IsNull(Me.tx担当者名) Then 28 strFilter = strFilter & " AND 担当者名 Like '*" & Me.tx担当者名 & "*'" 29 End If 30 31 32 Me.Filter = Mid(strFilter, 6) 33 If strFilter = "" Then 34 Me.FilterOn = False 35 Else 36 Me.FilterOn = True 37 End If 38End Sub

試したこと

between以外に
If Not IsNull(Me.商品コード開始) And IsNull(Me.商品コード終了) Then
strFilter = " AND 商品コード >= #" & Me.商品コード開始 & "# AND 商品コード <= #" & Me.商品コード終了 & "#"
End If
も試してみました←こちらの件は解決しました。

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

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

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

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

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

sousuke

2021/04/14 01:07

商品コードの桁数はすべて同じ桁数ですか?
sazi

2021/04/14 05:11

その商品コードが含まれるテーブルにその商品コードが有効な期間(開始~終了)があるという事では無いですか? 「条件で有効な期間を指定して、該当する商品コードをピックアップする」のがやりたい事ではないですか?
yazu-0809

2021/04/14 09:00

sousukeさま、商品コードの桁数は今のところ同じで7桁です。今後増える可能性はあるかもですが、 とりあえず扱う商品の数では足りています。 saziさま、おっしゃる通りのこともできるようにしたいというのが要望です。 年月度の検索だけでも可能でしたし、担当者などの検索はできたのですが、商品コード検索を入れると年月は動かなくなりました。もしかしてもう1つフォーム作ったほうがいいのでしょうか?
sazi

2021/04/14 10:19 編集

入力項目を#で囲っていたので日付項目なのかと思っていました。 質問としては、商品コードをそのコードの範囲で検索する仕様という事でいいのですね。 範囲で検索するという事は商品コードは体系化されているのだと推測します。 こういう場合は範囲ではなくlikeで例えば上4桁で検索するなどの方が目的にあっていると思うのですが、どうでしょうか。
yazu-0809

2021/04/14 10:24

saziさま:確かにlikeの作り方もありますね。日付の部分を#でくくっていたのは、コードを見ていたら、間違っていたと思いました。ただ日付のところは上4桁だと2020/07の表記なので、難しいのかなと思っていまして・・今回の質問については解決しましたので、別のフォームを作るときには改めてlikeでもチャレンジしてみます。ありがとうございました。
sousuke

2021/04/16 00:43

商品コードの桁数が増えたら「コード開始、コード終了」のロジックが破綻(少なくともわかりにくくなる)するのは考慮しておいたほうがいいです。元の7桁コードもすべて増やして全商品コードの桁数を揃えるならオッケーです。
guest

回答1

0

ベストアンサー

やりたいことは商品コードはテキスト型で数字のみです。(頭に0がつくため)

# で囲むのは日付/時刻型の場合です。テキスト型の場合は、'(単引用符)で囲んでください。
あと Ifの条件式も間違ってます。

vba

1If Not IsNull(Me.商品コード開始) And Not IsNull(Me.商品コード終了) Then 2 strFilter = strFilter & " AND 商品コード >= '" & Me.商品コード開始 & "' AND 商品コード <= '" & Me.商品コード終了 & "'" 3End If

Between を使うなら、

vba

1 If Not IsNull(Me.商品コード開始) And Not IsNull(Me.商品コード終了) Then 2 strFilter = strFilter & " AND 商品コード Between '" & Me.商品コード開始 & "' And '" & Me.商品コード終了 & "'" 3 End If

あと、蛇足ですか、フィールド名は「商品コード」とコードが半角になってますが、正しいですか。
できれば、テキストボックスの方は「商品コード開始」と全角になってますが。
全角に統一しておいた方がトラブルがないと思います。

追記

要望として「商品コード開始」と「商品コード終了」の項目には「商品コード開始」のみに入力されていても検索ができるように

または「商品コード開始」と「商品コード終了」を入れるとその範囲内のコードが表示されるようにしたいです。

上記の部分を見落としてました。下記のようにしてください。

vba

1```vba 2If Not IsNull(Me.商品コード開始) And Not IsNull(Me.商品コード終了) Then 3 strFilter = strFilter & " AND 商品コード >= '" & Me.商品コード開始 & "' AND 商品コード <= '" & Me.商品コード終了 & "'" 4ElseIf Not IsNull(Me.商品コード開始) Then 5 strFilter = strFilter & " AND 商品コード = '" & Me.商品コード開始 & "'" 6End If

投稿2021/04/13 21:06

編集2021/04/14 10:11
hatena19

総合スコア34075

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

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

yazu-0809

2021/04/14 08:56

ありがとうございます。コードの検索はできるようになりました。 ただそうすると、年月度を入れて商品コードを検索することができなくなってしまいました。 今回の場合、年月度を入れて商品コードを検索することもできるようになり、一方商品コードだけでの検索もできるようにしたいというのが会社の要望なのですが、可能なのでしょうか?
hatena19

2021/04/14 10:10

回答のコードが間違っていたので修正しましたので、ご確認ください。
yazu-0809

2021/04/14 10:21

ありがとうございます。年月度もテキスト型だったので、同じコードで変えたところすべてうまくいきました。本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問