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

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

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

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

Q&A

解決済

2回答

17131閲覧

ACCESS クエリで連番を振る

napoleon

総合スコア18

Access

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

0グッド

0クリップ

投稿2018/06/06 06:57

クエリで連番を振るやり方でよい方法があれば宜しくお願い致します。

◆やりたい事
クエリで連番を振って、その連番に応じてデータを抽出がしたい。

◆やっていること
Dcount関数を使用して連番を振っていた
連番: DCount("発注数","T_連番","発注数<=" & [発注数])

◆発生した問題
発注数が同数のものがあり、Dcout関数では同じ値が返ってくるようになった
イメージ説明

何かよい関数があればご教示いただけないでしょうか?
ネットで検索してみると、グルーピングしての連番を振るなどのヒントはあるのですが
同じ値があった場合の記述がなく、行き詰っております。
ご教示宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

連番: DCount("発注数","T_連番","発注数<=" & [発注数])

条件部分に条件を追加すれば良いですけど、その条件が無いなら、オートインクリメントの項目を追加して条件にするのが一番手っ取り早いかと思います。

投稿2018/06/06 07:20

sazi

総合スコア25195

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

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

napoleon

2018/06/06 07:37

ありがとうございます。 ロットや包装CDも同じ値になってしまい、発注数も計の値も同数になる可能性もあります。 クエリを作成しているマスタテーブルに包装コードごとの連番を振って条件にしてみようと思います。
guest

0

ベストアンサー

他にも連番を振るような場面が複数ある場合は標準モジュールで、
最大値を取得するようなソースを書いておいて、必要な時呼び出したら
いいかもしれません。

標準モジュール

VBA

1'====================================================================== 2' 3'最大値取得 4' 5'====================================================================== 6Public Function GetMaxNo(ByVal tblName As String, ByVal col_no As String, _ 7             Optional strWhere As String) As Long 8 9On Error GoTo Err_Proc 10 11 Dim strSQL As String 12 Dim rs As Recordset 13 Dim maxno As Long 14 15 'SQL文字列生成 16 strSQL = "SELECT MAX(" & col_no & ") AS MaxNo FROM " & tblName & " " 17 '抽出条件生成 18 If IsNull(strWhere) = False Then 19 strSQL = strSQL & strWhere 20 End If 21 22 'データ取得 23 Set rs = CurrentDb.OpenRecordset(strSQL) 24 25 '最大値取得 26 If Not rs Is Nothing Then 27 If (IsNull(rs![maxno]) = False) Then 28 maxno = rs![maxno] 29 Else 30 maxno = 0 31 End If 32 Else 33 maxno = 0 34 End If 35 36 'オブジェクト破棄 37 If Not rs Is Nothing Then 38 Set rs = Nothing 39 End If 40 41 '戻りセット 42 GetMaxNo = maxno + 1 43 44Exit_Proc: 45 Exit Function 46 47Err_Proc: 48 Resume Exit_Proc 49 50End Function

投稿2018/06/06 08:14

tera_taro

総合スコア46

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

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

napoleon

2018/06/06 08:30

今回は品目数があまり多くないので、マスタテーブルに連番を付けて回避しましたが、今後のデータ量が増えることを考えこの方法も試してみたいと思います。 ありがとうございました。今後とも宜しくお願い致します。
sazi

2018/06/07 01:46

>napoleon さん 連番等でユーザー定義関数にする目的は、Dcount()やDMax()などのD系関数をクエリーで使用すると遅い場合の代替で使用する事が殆どです。 連番を取得する手段としてのユーザー定義関数であり、連番をユニークにする目的に関してはDB設計しかありえませんのでご注意下さい。
napoleon

2018/06/07 02:42

sazi様 コメントありがとうございます。 まだまだ知識が乏しく手探りで作成している状況です。最終的にはDB設計で出来るように頑張っていこうと考えております。 また色々とご教示ください。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問