
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) テーブルを配列に入れて、元のテーブルの行番号を取得したい 1 2022/08/16 20:15
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
このQ&Aを見た人はこんなQ&Aも見ています
-
AccessのDMax関数の複数条件式に関して
Access(アクセス)
-
最新日のデータのみ抽出するクエリを教えて下さい
Access(アクセス)
-
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
-
4
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
5
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
6
Access サブフォームでの選択行の取得
その他(データベース)
-
7
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
8
Access2010 「演算子がありません」エラー
その他(データベース)
-
9
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
10
構文エラー:演算子がありません。 ACCESS SQL
その他(データベース)
-
11
クエリのデータをテーブルに入れたい
Access(アクセス)
-
12
新規レコード行を非表示にしたい
Access(アクセス)
-
13
アクセスのレポートのヘッダーを2ページ以降にもつけるには?
Access(アクセス)
-
14
Accessのサブフォーム内で連続番号を振りたい
Access(アクセス)
-
15
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
16
Accessでコードを入れると名前がでるようにしたい
Access(アクセス)
-
17
Accessのテーブルのフィールドに式を入れる方法
Access(アクセス)
-
18
Accessのレポート上のテキストボックス値を設定したい
その他(データベース)
-
19
Accessで、定型入力を使って年と月のデータだけ入力したい
Access(アクセス)
-
20
アクセスVBAのMe!と[ ]
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「直需」の意味を教えてください
-
作番ってどういう意味でしょうか?
-
「失注」の意味を教えてくださ...
-
アクセスで営業日を計算させる...
-
アクセスのクエリで、前回に入...
-
ACCESS 選択した値を別...
-
Access:サブフォームのレコー...
-
ACCESS 受注数の集計について
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
Access テキスト型に対する指定...
-
ACCESSでの改行コード
-
Oracle 2つのDate型の値の差を...
-
変数が選択リストにありません
-
エクセルグラフの凡例スペース
-
テーブルの存在チェックについて
-
INSERT INTO ステートメントに...
-
ACCESSのクエリで集計で、先頭...
-
VBAで複数の数式セルを最終行ま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「直需」の意味を教えてください
-
「失注」の意味を教えてくださ...
-
作番ってどういう意味でしょうか?
-
受注受付期間とはなんですか?...
-
ACCESSで、DMax関数の条件の書き方
-
アクセスのクエリで、前回に入...
-
マクロ転記で指定した列の最終...
-
ACCESS 選択した値を別...
-
アクセスで営業日を計算させる...
-
Access:サブフォームのレコー...
-
フォームにレコード数を表示したい
-
Access、同じテーブルの2つの項...
-
受注があるわけではないのに設...
-
VBA でvlookup エラーなどは削...
-
更新クエリの日付抽出方法について
-
データシート形式のサブフォー...
-
フォーム入力、更新後処理で指...
-
製造業向け受注生産型生産管理...
-
教えて下さい。
-
ACCESS2000の帳票フォーム詳細...
おすすめ情報