![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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 一番最新の日付の金額を出したいのですが・・
その他(データベース)
-
-
4
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
5
最新日のデータのみ抽出するクエリを教えて下さい
Access(アクセス)
-
6
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
7
Accessを使って日付を比較したい
その他(Microsoft Office)
-
8
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
9
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
10
【Access】Dcount関数の複数条件で順位を付ける方法について
Access(アクセス)
-
11
あるフィールドの最大値を条件にデータを抽出する方法
その他(データベース)
-
12
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
13
IIF関数の使い方
Visual Basic(VBA)
-
14
アクセスVBAのMe!と[ ]
Access(アクセス)
-
15
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
16
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
17
Access レコード移動時イベントでサブフォーム
Access(アクセス)
-
18
ACCESSのクエリで注文日に一番近い決済日を選ぶ方法
その他(データベース)
-
19
サブフォームの新規レコードに移動したい アクセス
Access(アクセス)
-
20
アクセスの更新クエリでカレントレコードのみ更新したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「直需」の意味を教えてください
-
Access:サブフォームのレコー...
-
作番ってどういう意味でしょうか?
-
データシート形式のサブフォー...
-
マクロ転記で指定した列の最終...
-
Excel 2019 のピボットテーブル...
-
セルの右クリックで出る項目を...
-
エクセルVBAで5行目からオート...
-
Accessクエリーで両方のテーブ...
-
異なるサーバのDBデータ同士を...
-
ACCESSのクエリで集計で、先頭...
-
Accessでテーブルの値をテキス...
-
Accessでテーブル名やクエリ名...
-
Vbaでアクセスからエクセルにリ...
-
access テーブル内のレコード...
-
Accessでコードを入れると名前...
-
ワードでの単純作業の効率化に...
-
ACCESS で マクロの中でフィ...
-
変数が選択リストにありません
-
Oracleのビュー作成時に「指定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「直需」の意味を教えてください
-
作番ってどういう意味でしょうか?
-
「失注」の意味を教えてくださ...
-
ACCESSで、DMax関数の条件の書き方
-
Access:サブフォームのレコー...
-
アクセスで営業日を計算させる...
-
ACCESS 選択した値を別...
-
アクセスのクエリで、前回に入...
-
マクロ転記で指定した列の最終...
-
受注受付期間とはなんですか?...
-
Accessの受注発注について
-
フォーム入力、更新後処理で指...
-
会社 ファイルの収納
-
データシート形式のサブフォー...
-
EXCEL 最終行に入力するマクロ
-
通販サイトの運用の問題点は?
-
VBA でvlookup エラーなどは削...
-
エクセル・スプレッドシートで...
-
更新クエリの日付抽出方法について
-
ACCESS 受注数の集計について
おすすめ情報