
アクセスのフォームにカンマ区切りで数値を入力し、そのまま反映させデータ出力したいです。
つい先日はお世話になりました。
おかげさまで出したい表を作れるようになりました。
そ、そして今度は、その表をマクロやフォームを使って簡単に出そうと試みています。
JANコードというフォームにJAN「aaaaaaaaaaaaa」を入力すると、
「aaaaaaaaaaaaa」という商品の在庫を所持している店舗を出すというものです。
↓↓↓
--------------------------------
JAN |店舗 |
-------------------------------|
aaaaaaaaaaaaa |1,2,4,6 |
--------------------------------
理想は、カンマ区切りの複数JANをフォームに入力したら、それらの一覧表が出力される仕様です。
↓↓↓
--------------------------------
JAN |店舗 |
-------------------------------|
aaaaaaaaaaaaa |1,2,4,6 |
--------------------------------
bbbbbbbbbbbbb |1,3,5,6 |
--------------------------------
ですが、今現在は単品でしか表が出せないという問題です。
下記のクエリの抽出条件で、入力した数値を導きだそうとしています。
In ([Forms]![在庫所持店舗表作成]![JAN])
単品なら上手く事が運び、表がでるのですが、
カンマ区切りの複数になると抽出条件が一致しませんとエラー表示が出ます。
どうやら、フォームで入力したカンマ区切りの数値が、
クエリ抽出条件側では「カンマ」が取り除かれています。
フォーム「aaaaaaaaaaaaa,bbbbbbbbbbbbb」
↓↓↓
クエリ上「aaaaaaaaaaaaabbbbbbbbbbbbb」
このクエリで使用しているテーブルには勿論、
26桁のJANなんか存在しませんので、エラー表示です。。
カンマ区切りJAN「aaaaaaaaaaaaa,bbbbbbbbbbbbb」のまま反映させる方法はありませんか??
複数商品の検索が出来ないとほぼ使い物になりませんorz
アクセス2000を使用しています。
何卒!何卒よろしくお願い致します。。。

A 回答 (14件中11~14件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#1,2です。
文章書いていたら回答があったみたいですね。
せっかくですので、出来上がったものを回答してみます。
> 抽出時間が大幅に伸びた・・・・この関数を使っているからでしょうか?
そうだと思います。(全件処理していると思うので)
他にもやり方はあるので、試されますか?
1)複数指定する上限(個数)を決めてやる
1-1)JAN 入力の更新後処理でテキストボックスに分割する
1-2)クエリ内で JAN をカンマ区切りで抜き出す
2)クエリの内容を参照&書き換え実行
3)テンポラリテーブルを使用した絞込みをする
1-2)2)の動くサンプルは私のブログからDLできますが、
規約によりアドレスは書けません。キーワードの提示もできません。
以下に簡単に書いていきます。
1)複数指定する上限(個数)を決めてやる
文字数制限もあるので、
フォーム名を「F1」、検索用テキストボックス名「JAN」とし、上限を5つとします。
上限をもっとしたい場合には同様な記述で追加してください。
(★★ 書いていった結果、文字数オーバしたので2つに分けます ★★)
1-1)JAN 入力の更新後処理でテキストボックスに分割する
フォームにクエリで参照するテキストボックス「tx0」~「tx4」を不可視で配置します。
検索用テキストボックス「JAN」の更新後処理で「tx0」~「tx4」へ分割設定します。
Private Sub JAN_AfterUpdate()
Dim sAry() As String
Dim i As Long
If (IsNull(Me.JAN)) Then
ReDim sAry(0)
sAry(0) = ""
Else
sAry = Split(Me.JAN, ",")
End If
For i = 0 To 4
If (i <= UBound(sAry)) Then
Me("tx" & i) = sAry(i)
Else
Me("tx" & i) = Null
End If
Next
End Sub
クエリの変更箇所での記述は、
((_単品在庫リアル.自社コード) In ([Forms]![F1]![tx0],[Forms]![F1]![tx1],[Forms]![F1]![tx2],[Forms]![F1]![tx3],[Forms]![F1]![tx4]))
とします。
IN句のところで、参照するテキストボックスをカンマ区切りで羅列していきます。
(テキストボックス1つに、自社コードが1つ入っている状態にして)
1-2)クエリ内で JAN をカンマ区切りで抜き出す
標準モジュールに以下関数を記述しておきます。
Public Function mySplit(vS As Variant, iNum As Integer) As String
On Error Resume Next
mySplit = ""
mySplit = Split(vS, ",")(i - 1)
End Function
クエリの変更箇所での記述は、
((_単品在庫リアル.自社コード) In (mySplit([Forms]![F1]![JAN],1),mySplit([Forms]![F1]![JAN],2),mySplit([Forms]![F1]![JAN],3),mySplit([Forms]![F1]![JAN],4),mySplit([Forms]![F1]![JAN],5)))
aaaa,bbbb の入力があった場合、
mySplit([Forms]![F1]![JAN],1) では、aaaa が
mySplit([Forms]![F1]![JAN],2) では、bbbb が得られます。
第2引数部分が、何個目、 の意味になっています。
必要な分を羅列していきます。書いた分が制限になります。
mySplit([Forms]![F1]![JAN],10) まで順に書いたとすると上限は10個に
【つづく】
No.3
- 回答日時:
確認したところ、クエリの抽出条件でフォームのテキストボックスの
値を参照する場合、Split関数を使用するなどしても、複数要素として
扱うことはできない(=「aaaaaaaaaaaaa,bbbbbbbbbbbbb」は全体で
1つの値としてしか扱えない)ようです。
ただ、VBAから直接SQL文を作成するなら、この縛りから逃れることが
できますので、最初にyukinosuke1104さんが示された通り、「In句」を
使用したSQL文を、VBAから作成するのがよいかと思います。
(In句なら完全一致分しか抽出しないので、上記の問題は発生しない:
検索条件に入力ミスがあれば結果が表示されないため、入力者が
ミスに気づきやすい、と)
以下、『在庫所持店舗表データ作成』コマンドボタンのクリックした時に
表示しているのが、クエリなのかフォームなのかがわからないため、
それぞれの場合を回答します。
なお、No.1の補足欄に貼り付けたSQL文を、予め以下の3つに分割して、
細工をしておいてください。
式【A】:
先頭の「Select」から「In (」までを「"」(ダブルクォート)で括ったもの
(「"SELECT _単品在庫リアル.~~~自社コード) In ("」)
式【B】:
フォームのテキストボックスを指定する「Forms!~」の式(そのまま)
(「[Forms]![在庫所持店舗表作成]![JAN]」)
式【C】:
上記の式の直後の「)) AND」から最後までを「"」で括ったもの
(「")) AND ((_単品在庫リアル.~~~.店舗コード;"」)
【フォームの場合】
上記コマンドボタンのクリック時イベントのVBAまたはマクロに、以下の
ようなコードを追記します:
<VBAの場合>
'当該フォームを開く「DoCmd.OpenForm」の行の後に、以下の
'コードを追記
Forms!店舗一覧.RecordSource = 【A】 & Me!JAN & 【C】
<マクロの場合>
当該フォームを開く『フォームを開く』アクションの後に、
『値の代入』アクションを追加
・『アイテム』:Forms!店舗一覧.RecordSource
・『式』:【A】 & 【B】 & 【C】
※一覧表示用のフォーム名を「店舗一覧」と仮定しました。
なお、上記コードでレコードソースを設定するので、同フォームの
デザインビューでの『レコードソース』は空白にしてしまって下さい。
【クエリの場合】
※こちらの場合、マクロのみでの対応はできません。
上記コマンドボタンで■クエリを開く前に■ 、以下のコードを追記します:
'<以下は、変数宣言部分に追記>
Dim qdf As DAO.QueryDef
'<以下は、クエリを開く前の部分に追記>
'フォームで指定したJANコードを、当該クエリの抽出条件に直接記述
Set qdf = CurrentDb.QueryDefs("クエリ名")
qdf.SQL = 【A】 & Me!JAN & 【B】
Set qdf = Nothing
・・・以上です。
No.2
- 回答日時:
((_単品在庫リアル.自社コード) In ([Forms]![在庫所持店舗表作成]![JAN]))
の部分を
(Nz(InStr([Forms]![在庫所持店舗表作成]![JAN],_単品在庫リアル.自社コード),0) > 0)
にするとどうなりますか。
この回答への補足
う、うぉ~~~!!!
ううう、うぉ~~~~~!!
複数のデータ抽出できましたーーー!!!!!!!!!!!
感激です。。。;;
ありがとうございます!!
お蔭様で効率よく仕事がこなせそうです><
最後に質問なのですが、単品で出した時に比べ(2、3秒)、
抽出時間が大幅に伸びた(アクセス応答無し表示になる)(3~4分)のは、この関数を使っているからでしょうか?
No.1
- 回答日時:
現在そのクエリをSQLビュー表示した際、WHERE 部分は
WHERE [JAN] In ([Forms]![在庫所持店舗表作成]![JAN])
のようになっているかと思いますが、以下に変更してみてどうなりますか。
WHERE Nz(InStr([Forms]![在庫所持店舗表作成]![JAN],[JAN]),0) > 0
この回答への補足
SELECT _単品在庫リアル.自社コード AS JAN, _単品在庫リアル.店舗コード INTO T1_在庫保持
FROM _単品在庫リアル INNER JOIN _店舗マスタ ON _単品在庫リアル.店舗コード = _店舗マスタ.店舗コード
WHERE (((_単品在庫リアル.自社コード) In ([Forms]![在庫所持店舗表作成]![JAN])) AND ((_単品在庫リアル.理論在庫数量) Not In (0,Null)) AND ((_店舗マスタ.事業部コード)=0))
ORDER BY _単品在庫リアル.自社コード, _単品在庫リアル.店舗コード;
該当クエリのSQLビューとはこのことでしょうか??
変更する箇所にカッコが多くてどう変えてみればいいのかわかりません。。
お願い致します><
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java コンソールから所属財産を入力(単位:万円 1000~100000以内でIntegerに変換できない場 2 2022/05/31 21:32
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
- 会社・職場 輸出について 2 2023/02/02 00:17
- その他(買い物・ショッピング) JANコードの登録について 1 2022/07/23 14:19
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- Excel(エクセル) SUMIFS 一部の条件のどちらかを参照する場合を教えてください。 2 2022/04/26 12:48
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
このQ&Aを見た人はこんなQ&Aも見ています
-
Accessの桁区切りについて教えてください。
Access(アクセス)
-
Access ¥マークを表示しない
Excel(エクセル)
-
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
-
4
access テキスト型の数字の書式
その他(Microsoft Office)
-
5
Accessのクエリで、replace関数を使い、データの中にある”をブランクに置き換えたいのですが
Access(アクセス)
-
6
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
7
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
8
access マクロでのフィルタの解除の方法
Access(アクセス)
-
9
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
10
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
11
ACCESS VBA でのエラー解決の根拠がわかりません エラー「イベントプロパティに指定した式・・
Access(アクセス)
-
12
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
13
ACCESSのフォーム上で複数検索したい項目がある場合どうすればいいですか?
Access(アクセス)
-
14
アクセスでレポートの1印刷内に複数のレコードを表示させたい
Visual Basic(VBA)
-
15
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
16
アクセスの初心者の質問です(空白の場合に他のフィールドを表示させたい。)
Access(アクセス)
-
17
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
18
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
19
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
20
Accessのクエリでデータの入力ができません
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access2000で文字列中の半角ス...
-
年月日を持つテーブルから年月...
-
Accessでパラメータークエリの...
-
複数条件検索について
-
検索フォームで空白を抽出したい
-
Accessのフォームで、空欄のレ...
-
ACCESS マクロで検索に...
-
複数のフォームの表示順を変え...
-
Access レポート印刷するときに...
-
passwordが入れられません・・・・
-
アクセスで数値型のフィールド...
-
ACCESS フォームをそのまま印刷...
-
アクセスでテキストボックスの...
-
データベースのINT型項目にNULL...
-
Access2013 レポートを印刷する...
-
レコードを保存するコード ア...
-
accessのフォームをレポートに...
-
Excelのデータフォームの設定変更
-
クエリで出来た表にチェックボ...
-
「フォームを作成できませんで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
access 検索フォームで検索が...
-
ACCESS2003 でクエリの抽出条件...
-
年月日を持つテーブルから年月...
-
アクセスのフォームにカンマ区...
-
Accessのフォームで、空欄のレ...
-
パススルークエリの動的パラメ...
-
VBAからクエリのパラメータを設...
-
Access2000で文字列中の半角ス...
-
Accessの検索フォームで。
-
ACCESSのフォーム上で複数検索...
-
SQL*Loader
-
Access テキストボックスとlik...
-
アクセス マクロのメッセージ...
-
Access2007のサブフォームのReq...
-
フォームに表示したいんですが...
-
Accessでの電話番号下4桁での検...
-
ACCESSのフォームを使っての住...
-
ACCESS マクロで検索に...
-
コマンドの検索について。
-
複数条件検索について
おすすめ情報