アクセス2010 ナンバーリングのコードについて

このQ&Aのポイント
  • アクセス2010で取引台帳テーブルに連結した入力フォームを作り、件名を入力すると契約NOを自動で採番する方法について教えてください。
  • 現在は契約NOの最大値+1を使用していますが、それでは前回作られた契約NOと重複する可能性があります。どのように修正すればいいでしょうか?
  • また、VBのコードを学んだことがないため、本やサンプルを参考にして作成しています。わかりやすく教えていただきたいです。
回答を見る
  • ベストアンサー

アクセス2010 ナンバーリングのコードについて

アクセス2010で取引台帳テーブルに連結した入力フォームを作り、件名を入力すると契約NOを自動で採番するように 下記のコードにして使っていました。 しばらくはちゃんと採番されていたのですが、分類をする時に使う、 2個あった区分を3個に追加して、 コードも2個から3個に追加しました。それから変になった気がします。 契約NOの最大値+1だと前回作られたNOと重複するようになってしまい、 契約NO+2だと、最後の最大値の次のNOが作れます。 なぜ突然こうなったのかが分かりません。 VBのコードをきちんと学んだ事がなく、本でサンプルを見たりしながら作っています。 わかりやすく教えていただきたく、お願いいたします。 契約NOは R-KS1305-0055 Rが区分 KSがコード 1305が年月2013/05 0055が連番で採番しています。 Private Sub 物件名_AfterUpdate() Me![契約NO] = Me![区分] & "-" & Me![コード] & Format(Me![入力日], "yymm") & "-" & Format(DCount("契約NO", "取引台帳") + 1, "0000")

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

DCount で件数を取得して、それから連番を生成してますね。 途中のレコードが1件削除されてませんか。 そうすると連番が重なるようになります。 DMaxで最大値を取得するようにすればいいと思いますが、区分や年月などの余分な情報が付いているためそれを除いた最大値を取得する必要がありますね。 Me![契約NO] = Me![区分] & "-" & Me![コード] & Format(Me![入力日], "yymm") & "-" & Format(Val(DMax("Right([契約NO],4)", "取引台帳")) + 1, "0000")

mitimama
質問者

お礼

わかりました。 また勉強していきます。とっても助かりました。

mitimama
質問者

補足

早速、ありがとうございます。 上の通りに修正したら、また連番ができました! ちなみに、不要なデータは削除してはいけないのですか? 削除コマンドボタンで、削除できる様にしているのですが。

その他の回答 (1)

回答No.2

> ちなみに、不要なデータは削除してはいけないのですか? 最初の件数(DCount)で連番をつけると、削除した分だけ取得する連番が小さくなりますからダメですが、 私の提案した最大値(DMax)を取得する方法なら、削除しても大丈夫です。 コードのロジックをきちんと理解して使用するようにしましょう。

関連するQ&A

  • アクセスのコードについて2

     アクセス2000で、以下のようなコードを記述して、case_noのデータをファイル名としたhtmlファイルを、d:\data\のフォルダに出力するようにしています。 Open "d:\data\" & Me!case_no & ".htm" For Output As #1  出力先のフォルダを各レコード毎ではなく、全体として任意に設定できるようにしたいと思い、フォルダ名を入力可能な管理テーブルを別途作成しました。  この別に作成した管理テーブルのデータを、コード内で参照したいのですが、うまくいきません。どのようにすればよいのでしょうか?

  • アクセスのコード記述について

    アクセスのデータをタグ付のテキストで出力するために、以下のようなコードをコマンドボタン1に割り当てました。 Private Sub コマンド1_Click() Open "c:\test.htm" For Output As #1 Print #1, "<html>" Print #1, "<title>テスト</title> Print #1, "<body>" Print #1, "<PRE>" Print #1, Me!data Print #1, </PRE> Print #1, "</body>" Print #1, "</html>" Close #1 End Sub 上記のコードに、アクセスデータ中に入っているcase_noのデータをファイル名としたイメージを読み込むために以下のタグ <IMG SRC ="c:\1234.gif">を追加したいと思い、下記のコードを追加したのですが、アクセスのコードの「"」とタグの「"」とが混在してしまっているのでエラーになってしまいます。どうしたらいいのでしょうか? Print #1, "<IMG SRC ="c:\" & Me!case_no & ".gif">" 

  • Access計算式のフィールドの指定方法

    Accessの問題集を解いてみているのですが、レポートの中で 計算式を作ってレポートビューにすると、 意図しないパラメータの入力画面が出てしまいます。 解答は書いてあるので、確かにそのようになるのは確認できたので すが、解説がなく何故そうなるのかご教授いただけないでしょうか。 <テーブル> 「取引先台帳」 フィールドにYes/No型の[会員]ほか           [取引先コード][取引先名]など 「受注台帳」  [受注No][取引先コード][商品名][単価][個数]ほか <クエリ> 「受注一覧」 上記2つのテーブルを利用して作成         金額:[単価]*[個数] フィールドあり <レポート> 上記クエリを利用して作成 [取引先コード]でグループ化 [金額]フィールドをSum関数で合計し[subtotal]フィールドとして設定 [会員]フィールドはレポート上に入れていない このレポートの中で[会員]がONの取引先(コード)には、会員割引金額を表示する ため、IIF関数を使用し =IIf([会員],[subtotal]*0.05,0) とするとあります。 計算式をいつも式ビルダで作成している場合、[会員]フィールドが現在作成中の フィールド一覧にないため、基となるテーブルから[会員]フィールドを引っぱっ てきたら以下のように作成されます。 =IIf([取引先台帳]![会員],[subtotal]*0.05,0) で、これをレポートビューで表示すると、 「パラメータの入力」ダイアログボックスで「取引先台帳」とメッセージが なっているものが表示されます。何も入力せず「OK」をしても正しく計算できてません。 [取引先台帳]!を削除すれば、解答と同じになるため正しく計算してくれます。 クエリなどの計算式ではテーブル名が入っていても、正しく計算してくれるようでしたが、 この場合は、何故パラメータの入力メッセージが出てしまうのでしょうか。 長文になりましたが、よろしくお願いします。 情報が足りなければ、追加します。

  • ACCESSで、DMax関数の条件の書き方

    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") -------------------------------------------------------------------------------------------

  • アクセス2010 マクロ 印刷ダイアログを表示

    アクセス2010でテーブルに連結した取引台帳を入力フォームがあります。 そのフォームで入力後、コマンドボタンで印刷を実行します。 コマンドボタンには、マクロで レポートを開く レポート名 請求書発行レポート ビュー 印刷 フィルター名 なし Where条件式 =[契約NO]=[Forms]![取引台帳入力フォーム]![契約NO] ウィンドウモード 標準 と、開いているフォームのページがレポート印刷されるようにしました。 ですが、モノクロ・カラー印刷と印刷の都度設定したいので、印刷が実行される前に 印刷ダイアログを表示させたいのです。 この方法を、どうぞ教えていただきたくお願いいたします。

  • ACCESS2000のテーブル構造

    ACCESS2000のテーブルの作り方について質問します。 伝票フォームを作り「取引先コード」「商品区分コード」「商品コード」3項目を入力したら単価が表示されるようにしたいのですが、うまくいきません。 (同じ商品でも取引先により単価が違うので、3つの情報がそろったときにはこの単価になるという形にしたいのです) 現状は「商品区分テーブルの区分コード」と「商品マスターテーブルの区分コード」  「商品マスターテーブルの商品コード」と「単価テーブルの商品コード」をそれぞれ1対多リレーションし、 そして「単価テーブルの単価コード.商品コード取引先コード,単価」で選択クエリを作り、それを伝票のサブフォームにしてみたのですが、商品コードが入力できませんでした・・・ 何冊か本を参考にして作ってみたのですがうまく出来ませんでした お分かりになる方がいらっしゃいましたら教えてくださいよろしくお願いいたします。

  • エクセルでの採番と保存方法について

    エクセルの1つのファイルに シート1~3には同じフォーマットの報告書が入っています。1はAさん用2はBさん用3はCさん用です。各自このファイルにアクセスして報告書を好きな時に作成します。 シート4にはこの報告書の管理台帳が有ります。台帳にはNO1~3が入っていて報告書の題名と報告書の作成者を入力する欄が有ります。 質問は 各自が報告書を入力し終えた時点でシート4の台帳に作られた番号NO1~3が自動採番され、報告書の所定のセルに自動でコピーされなおかつシート4の台帳には番号の後に報告書の題名と作成者氏名とが自動で入力される方法はどうやったらよいかという事です。 わかりづらい質問かもしれませんが 宜しくお願い致します。

  • アクセス2000 5行で改ページ

    アクセス2000のレポートで、5行で改ページをさせようと以下のようにコードを記述しましたがうまくいきません。 どなたかアドバイスをお願いします。 配置されているテキストボックスは、 [氏名] [人事区分チェック1] [人事区分チェック2] [人事区分チェック3] [人事区分チェック4] [人事区分チェック5] [人事区分チェック6] [人事区分チェック7] [その他の内容] [役職] [採用年月日] [契約終了日] [備考] でコードは以下の通りです。 Dim i, j Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) i = 0 j = DCount("*", "採用時提出書類管理クエリ", "[教授会]=reports![92 人事関係報告書]![教授会]") End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) i = i + 1 If i Mod 5 = 0 Then If i <= j Then Me![bpage].Visible = True Else Me![氏名].Visible = False Me![人事区分チェック1].Visible = False Me![人事区分チェック2].Visible = False Me![人事区分チェック3].Visible = False Me![人事区分チェック4].Visible = False Me![人事区分チェック5].Visible = False Me![人事区分チェック6].Visible = False Me![人事区分チェック7].Visible = False Me![その他の内容].Visible = False Me![役職].Visible = False Me![採用年月日].Visible = False Me![契約終了日].Visible = False Me![備考].Visible = False End If Else Me![bpage].Visible = False If i < j Then Me.NextRecord = True Me![氏名].Visible = True Me![人事区分チェック1].Visible = True Me![人事区分チェック2].Visible = True Me![人事区分チェック3].Visible = True Me![人事区分チェック4].Visible = True Me![人事区分チェック5].Visible = True Me![人事区分チェック6].Visible = True Me![人事区分チェック7].Visible = True Me![その他の内容].Visible = True Me![役職].Visible = True Me![採用年月日].Visible = True Me![契約終了日].Visible = True Me![備考].Visible = True ElseIf i = j Then Me.NextRecord = False Me![氏名].Visible = True Me![人事区分チェック1].Visible = True Me![人事区分チェック2].Visible = True Me![人事区分チェック3].Visible = True Me![人事区分チェック4].Visible = True Me![人事区分チェック5].Visible = True Me![人事区分チェック6].Visible = True Me![人事区分チェック7].Visible = True Me![その他の内容].Visible = True Me![役職].Visible = True Me![採用年月日].Visible = True Me![契約終了日].Visible = True Me![備考].Visible = True Else Me.NextRecord = False Me![氏名].Visible = False Me![人事区分チェック1].Visible = False Me![人事区分チェック2].Visible = False Me![人事区分チェック3].Visible = False Me![人事区分チェック4].Visible = False Me![人事区分チェック5].Visible = False Me![人事区分チェック6].Visible = False Me![人事区分チェック7].Visible = False Me![その他の内容].Visible = False Me![役職].Visible = False Me![採用年月日].Visible = False Me![契約終了日].Visible = False Me![備考].Visible = False End If End If End Sub データが5件未満は正しく表示されますが、5件を超えると2ページ目が4件しか表示されなかったりします。 グループ化がされており、[bpage]という改ページが入っています。 よろしくお願いします。

  • Access2000 DLookup関数の使い方

    色々試してみたのですがわからないので質問させていただきます。 フォーム/サブフォームを作っています。 サブフォームにある商品コード(コンボボックス)を入力すると、同じサブフォームにある単位、単価に商品台帳テーブルの値(単位、単価)を持ってくるようにしたつもりなのですが・・・。 商品コードの更新処理後に以下のコードを記述したのですが、うまく動きません(エラーは出ない)。 Me![単価] = DLookup("[単価]","商品台帳","[商品コード] = [Forms]![フォーム]![サブフォーム]![商品コード]") どこが悪いか教えていただけないでしょうか?

  • Access2010のリンクテーブルについて

    Access2010のリンクテーブルについて質問をさせてください。 現在、社内ではExcelシートで対応ログを残しています。 ログ入力や検索のことを考えれば、Accessへ移行するべきだと思うのですが、現在その予定はありません。また、ここで対応内容に応じて「区分」を付加していきたいと考え、以下のことを行いました。 1.ExcelシートをリンクテーブルとしてAccessに取り込み。  [対応テーブル]   ・対応NO   ・対応内容 2.今後加えていきたい区分のテーブルを作成  [区分マスタ]   ・区分NO   ・区分名 3.AccessでExcelシートは更新できないので、1と2をもとにしたテーブルを作成  [対応明細]   ・対応明細NO   ・対応NO(1と結合)   ・区分NO(2と結合)    3.のテーブルに対し、「対応NO」と「区分NO」を入力していければ、もともとのExcelファイルをいじることなく、区分を追加していけるものと考えたのですが、「このレコードセットは更新できません。」とのエラーとなってしまいます。 以前のAccessではExcelのリンクテーブルも更新できたと思うのですが、大人の事情でそれができなくなったことは認識しています。その回避策として、リンクテーブルに編集を加えるのではなく、更新用のテーブルを用意して入力していこうと思ったのですが、それもできません。 回避策がありましたらご教示いただけますでしょうか。 宜しくお願いいたします。