
ACCESS2002を使用しています。
自動的に連番を採番するコードを書きましたが、DMax関数でうまく最大値を取得できません。
条件式がうまく書けていないと思うのですが、どうぞお知恵をお貸しください。
テーブル[t_受注]にあるフィールド[受注コード]は、「yyyymm000」のように9桁表示です。
「yyyymm」の部分は現在の年月から取得し、「000」の部分は年月ごとに001~連番を採番しています。
しかし年月が変わるとうまく最大値を取得できず、次のように連番が採番されてしまいました。
[受注コード]
200705001
200705002
200705003
200705004
200706001
200706005(本当は200706002と自動採番したいのです)
最大値(MaxID)取得するコードはこのように書いております。
よろしくお願いします。
-------------------------------------------------------------------------------------------
Dim NowYearMonth As String
Dim MaxYearMonth As String
Dim MaxID As String
NowYearMonth = Format(Date, "yyyymm")
MaxYearMonth = Nz(DMax("Mid$([受注コード],1,6)", "t_受注"), "")
MaxID = Nz(DMax("Mid$([受注コード],7,3)", "t_受注"), "NowYearMonth=MaxYearMonth")
-------------------------------------------------------------------------------------------
No.2ベストアンサー
- 回答日時:
今晩は。
1>MaxYearMonth = Nz(DMax("Mid$([受注コード],1,6)", "t_受注"), "")
2>MaxID = Nz(DMax("Mid$([受注コード],7,3)", "t_受注"), "NowYearMonth=MaxYearMonth")
1>では、格納中の最大年月を取得し、
2>では、格納中の最大番号(年月を除いた中での最大)しかもとまりません。
1>と2>の関連が無いのです。
以下で如何でしょう。
※"[受注コード]"は文字列フィールドとして定義しています。
Dim nowMax As Variant
Dim newMax As String
Dim NowYearMonth As String
NowYearMonth = Format(Date, "yyyymm")
nowMax = Nz(DMax("[受注コード]", "t_受注", "Mid([受注コード],1,6)='" & NowYearMonth & "'"), "")
If nowMax = "" Then
newMax = NowYearMonth & "001"
Else
newMax = NowYearMonth & Format(Val(Mid$(nowMax, 7, 3)) + 1, "000")
End If
私のコードの何が間違っているのかの説明までして頂き、よく理解することができました。
そもそも連番部分のみの最大値を取得しなくてもよいのですね。
サンプルで試してみたところ、思い通りの結果となりました!
数時間悩んでいたものが、あっという間に解決でき嬉しいです。
回答本当にありがとうございました。
No.3
- 回答日時:
こんにちは。
#2です。>nowMaxはStringではなくVariantにすべきでしょうか?
YYYYMMnnnの数値のみであること。
nz(Dmax(),"")の様にNULL値を補正しているのであれば
Stringで問題ないです。
※ご提示したコードのNZ()未対応の際にVariantとした名残でした。
No.1
- 回答日時:
うーん、試してないですけど下記じゃないですかね?
×MaxID = Nz(DMax("Mid$([受注コード],7,3)", "t_受注"), "NowYearMonth=MaxYearMonth")
↓
○MaxID = Nz(DMax("Mid$([受注コード],7,3)", "t_受注"), "Mid$([受注コード],1,6)=" & MaxYearMonth)
おせっかいですが、DMax関数を使用した簡易的なものを書いてみました
※たぶんできるはず(^^;)
Dim NowMaxID As String
Dim NewMaxID As String
Dim Counter As Integer
NowMaxID = Nz(DMax("受注コード", t_受注), "")
NewMaxID = Format(Date, "yyyymm")
Counter = 0
If NowMaxID <> "" Then
If Left(NowMaxID, 6) = Format(Date, "yyyymm") Then
Counter = CInt(Mid(NowMaxID, 7, 3))
End If
End If
NewMaxID = NewMaxID & Format(Counter + 1, "000")
DMax関数での条件式ばかりで考えていたので、IF文でも記述できることに気がつきませんでした。
教えて頂いたサンプルで試してみたところ、思い通りの結果が出てきました!
回答本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
AccessのDMax関数の複数条件式に関して
Access(アクセス)
-
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
-
4
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
5
最新日のデータのみ抽出するクエリを教えて下さい
Access(アクセス)
-
6
Access サブフォームでの選択行の取得
その他(データベース)
-
7
Access2010 「演算子がありません」エラー
その他(データベース)
-
8
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
9
AccessのフォームのテキストボックスにLOOKUPで表示したい
Access(アクセス)
-
10
クエリのデータをテーブルに入れたい
Access(アクセス)
-
11
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
12
Accessのサブフォーム内で連続番号を振りたい
Access(アクセス)
-
13
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
14
Accessのテーブルのフィールドに式を入れる方法
Access(アクセス)
-
15
Accessで、定型入力を使って年と月のデータだけ入力したい
Access(アクセス)
-
16
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
17
テーブルに主キーを作らないデメリットは?
その他(Microsoft Office)
-
18
エクセルをACCESSのレポートに変換する方法
その他(Microsoft Office)
-
19
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
20
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「直需」の意味を教えてください
-
作番ってどういう意味でしょうか?
-
「失注」の意味を教えてくださ...
-
受注受付期間とはなんですか?...
-
Excelにて複数の受注残を計算す...
-
Excel 2019 のピボットテーブル...
-
Accessでテーブル名やクエリ名...
-
エクセルVBAで5行目からオート...
-
エクセルグラフの凡例スペース
-
Access テキスト型に対する指定...
-
Oracle 2つのDate型の値の差を...
-
VBAで複数の数式セルを最終行ま...
-
異なるサーバのDBデータ同士を...
-
Accessファイルを作成者以外は...
-
Accessクエリーで両方のテーブ...
-
第1正規形→第2正規形
-
ORACLEでLONG項目からCHAR項目...
-
指定した項目の列削除
-
SQL*Loaderでのゼロ埋め
-
FROM の中で CASE を使えるでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「直需」の意味を教えてください
-
「失注」の意味を教えてくださ...
-
作番ってどういう意味でしょうか?
-
受注受付期間とはなんですか?...
-
ACCESS 選択した値を別...
-
Access:サブフォームのレコー...
-
アクセスで営業日を計算させる...
-
データシート形式のサブフォー...
-
ACCESS 受注数の集計について
-
コロナ状況下のバナー広告の依...
-
アクセスのクエリで、前回に入...
-
ACCESSで、DMax関数の条件の書き方
-
更新クエリの日付抽出方法について
-
excelマクロの処理を早くしたい...
-
access 1対1と1対多のテーブ...
-
ACCESSの同時にデータ入力★初心...
-
ACCESSを活用して商品変...
-
マクロ転記で指定した列の最終...
-
ACCESS2000の帳票フォーム詳細...
-
Access、同じテーブルの2つの項...
おすすめ情報