Windows98SE + Access97

現在ユーザーサポートの「問い合わせ管理簿」を作成しています。
ユーザーから新しい問い合わせがあるたびにレコードを一つずつ
増やしていくわけなのですが、そこに独自の形式の連番を振りたいのです。
「"年(4桁)" - "月(2桁)" - "その月での問い合わせ件数 + 1(3桁)"」という形式です。

具体的には、今日が2002年1月28日で、1月の問い合わせ件数が30件だと
すると、「2002-01-031」という形式で新しいデータに連番を振りたいの
です。
2月になったら「2002-02-001」から始まります。

これを実現するにはどういったロジックが考えられるでしょうか。
助言をお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

年と月、通番を別々のフィールドにします。


新しい通番を取得する際、年と月を指定して Selectし、DMaxで通番の最大値を求め、+1した値で書き込みます。
    • good
    • 0

同じ様な回答を今したばかりですのでご参考に m(_ _)m



参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=195773
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアクセス メインフォームの伝票番号(DMax関数で連番)が11番以上自動連番されない。

こんばんは。どうしてなのか、原因がみつけられません。
解決方法をご教示いただけないでしょうか?よろしくお願いいたします。

事象:メインフォームの伝票番号が11番以上は自動連番されない。
(伝票番号10までは、新規追加すれば発番できていたのに、11以降、手入力で対応中。)

仕様:
table:伝票テーブル(伝票番号フィールドはテキスト型)
明細テーブル(明細番号フィールドはオートナンバー型)
※明細テーブルに伝票番号フィールドがあって、伝票テーブルの伝票番号フィールドとリレーションシップがかかっています。
Query:伝票クエリ
明細クエリ
Form:伝票フォーム
(伝票番号のプロパティ\データ\規定値に、=Nz(DMax("[伝票番号]","伝票テーブル")+1,1)と設定)
   明細フォーム

伝票フォームに、明細フォームをサブフォームとして組み込んでいます。
新規追加をすれば、伝票番号が発番されて、サブフォームへ明細情報を入力する。

イメージ画像添付します。

どうすれば、11以降も、自動連番されるのでしょうか?
困っています。どうかよろしくお願いいたします。

こんばんは。どうしてなのか、原因がみつけられません。
解決方法をご教示いただけないでしょうか?よろしくお願いいたします。

事象:メインフォームの伝票番号が11番以上は自動連番されない。
(伝票番号10までは、新規追加すれば発番できていたのに、11以降、手入力で対応中。)

仕様:
table:伝票テーブル(伝票番号フィールドはテキスト型)
明細テーブル(明細番号フィールドはオートナンバー型)
※明細テーブルに伝票番号フィールドがあって、伝票テーブルの伝票番号フィールドとリレ...続きを読む

Aベストアンサー

テキスト型の比較では
"10" < "2" ですからね。

伝票番号フィールド を 数値型にすれば問題ないんですが、
それじゃダメなの?

Qクエリでグループ毎に連番を振りたい

ACCESS2000です。

以下のようなテーブルがあります。
役職と氏名の2つフィールドがあります。

役職   氏名   役職連番
部長   山田   1
部長   蟹田   2
部長   長谷   3
係長   金本   1
係長   佐藤   2

という感じで、役職に対して連番を振りたいんですが
こんのようことをする場合はどうすれば良いんですか?

Aベストアンサー

多分、クエリーでは出来ないと思いますよ。
VBAで組むしかないと思います。
VBAでループやレコード更新の記述ができれば、さして難しくはないでしょう。
いわゆるコントロールブレイクの処理になります。

QACCESS2000でコードごとの連番を振るには

規約違反で削除されましたので再質問させていただきます。
・access2000で部門コードごとに連番を振りたいが、その際「単価」が入力されていないものは省きたい。
アドバイスを受けて以下のコードを作りましたが、連番を付与したあとで単価を削除しても連番が消えません。その次の数値と同じ連番が入ったままになっています。
文字数の関係で関係のありそうな後半だけしか書くことができませんが、よろしくお願いします。

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(sql)
Set fldCode = rst.Fields("部門コード")
Set fldNo = rst.Fields("番号")
If rst.BOF = False Then
rst.MoveLast
rst.MoveFirst
count = 1
code = "00"
Do Until rst.EOF
rst.Edit
If fldCode <> code Then
Select Case fldCode
Case "01": count = 21
Case "02": count = 31
Case Else: count = 1
End Select
code = fldCode
End If
If rst.Fields("単価") > 0 Then
fldNo = count
rst.Update
count = count + 1
End If
rst.MoveNext
Loop

End If
dbs.Close

cmd連番_Click_Err_Exit:
Exit Sub
cmd連番_Click_Err:
MsgBox Error$
Resume cmd連番_Click_Err_Exit

End Sub

規約違反で削除されましたので再質問させていただきます。
・access2000で部門コードごとに連番を振りたいが、その際「単価」が入力されていないものは省きたい。
アドバイスを受けて以下のコードを作りましたが、連番を付与したあとで単価を削除しても連番が消えません。その次の数値と同じ連番が入ったままになっています。
文字数の関係で関係のありそうな後半だけしか書くことができませんが、よろしくお願いします。

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(sql)
Set fldCode ...続きを読む

Aベストアンサー

>連番が動かない方法はありますでしょうか?

あります。ヒントだけさしあげます。
・まず、tbl商品を元にしたレコードセットをもう一つ用意します。仮にこれを rst2 とします。
・次に、
>    fldNo = count
>    count = count + 1
の前に
(1) (部門コード=rstのカレントレコードの部門コード)、かつ、(番号=count)、かつ、(単価≠0)
の条件で rst2 を検索します。
(2-1) rst2 に見つからない場合
その count を採用して、rst を Update
(2-2) rst2 に見つかった場合
count = count + 1 をしてから、増えた count を使用して、(1) と同じ検索を行う。以下、これを繰り返す。

というふうにします。
この方法だと、欠番もできません。(ただし、実行スピードは遅いと思います。欠番ができてもよいので実行スピードを上げたい場合、同じ部門コードでの番号の最大値を取得して、それを +1 していけばいいでしょう。ただし、その場合、部門コードごとの開始番号(部門01→21、部門02→31・・・)が割り当て済みでなければなりません。)

>連番が動かない方法はありますでしょうか?

あります。ヒントだけさしあげます。
・まず、tbl商品を元にしたレコードセットをもう一つ用意します。仮にこれを rst2 とします。
・次に、
>    fldNo = count
>    count = count + 1
の前に
(1) (部門コード=rstのカレントレコードの部門コード)、かつ、(番号=count)、かつ、(単価≠0)
の条件で rst2 を検索します。
(2-1) rst2 に見つからない場合
その count を採用して、rst を Update
(2-2) rst2 に見つかった場合
count = count + ...続きを読む

QAccess2002でレポート(納品書)に連番を打ち出したい

色々検索したのですが、なかなかヒットせず、質問させていただくことにしました。

要望は単純です。でも、私に回答を導くことはできませんでした。

一般的な「納品書」をレポートで印刷する際、連番(ユニークであればなんでもかまいませんが)を振って、印刷したいのです。

裏にあるテーブルやクエリには連番フィールドがないので、困っています。と申しますか、フィールドをどこかに作ろうと思っても、リレーションをつなぐ相手がいないのです。
「注文」に紐付けるにも、納品書は複数の「注文」から成り立っているので、相手が複数になりますし、「顧客」に紐付けると、今度はユニークにならず。。。

「連番テーブル」みたいなものを独立させ、クエリを実行するたびに[番号+1]のような処理をさせようかとも考えましたが、独立したテーブルを作ってクエリに紐付けると、Accessから怒られまして。。。

文房具店に売っているような納品書には最初から連番が振ってあるものがありますよね?あのイメージです。

どなたか解決策をお持ちの方がいらっしゃれば、是非ご教授お願いいたします。

色々検索したのですが、なかなかヒットせず、質問させていただくことにしました。

要望は単純です。でも、私に回答を導くことはできませんでした。

一般的な「納品書」をレポートで印刷する際、連番(ユニークであればなんでもかまいませんが)を振って、印刷したいのです。

裏にあるテーブルやクエリには連番フィールドがないので、困っています。と申しますか、フィールドをどこかに作ろうと思っても、リレーションをつなぐ相手がいないのです。
「注文」に紐付けるにも、納品書は複数の「注文」から成...続きを読む

Aベストアンサー

#6です
>>新規作成→オートナンバーで連番が自動作成される
>これはどういう操作でしょうか?
新規作成は、「納品書新規作成」のつもりでした。#6に書いたような構造を持つ、「納品書テーブル」の存在が前提です。このテーブルに「納品書ID:オートナンバー」が存在しなければならないですが、「その作り方も判らない」ようであれば、入門書などで勉強してください。

>>新規レコード追加→親子の関連づけにより「注文テーブル」の「納品書ID」に親フォームの「納品書ID」が記載される
>この「関連付け」はどこでなされているのでしょうか?

「親子の関連づけ」が正しくされていれば、アクセスが面倒を見てくれます(自動的に記入してくれる)。

Q条件別に連番を振る方法を教えてください。

お世話になります。
下記の様な条件による連番をふるマクロを組みたいと考えており、
色々考えてたのですがやり方が分からなく困っています。多少複雑だとは思いますが、すみませんが、詳しい方よろしくお願い致します。

内容として、例えばですが野球チームの選手をランク別にあるコーチに割り当てたいとします。

T_コーチマスタ(テーブルA)
ランク  コーチ名  担当数MAX
--------------------------------
 A    鈴木     2←Aランク選手に割り当てたいコーチ
 A    橋本     2←Aランク選手に割り当てたいコーチ
 B    田中     2←Bランク選手に割り当てたいコーチ
 B    青木     3←Bランク選手に割り当てたいコーチ
 C    佐藤     2←Cランク選手に割り当てたいコーチ

(補足:ランク順に昇順しています)


T_選手マスタ(テーブルB)

ランク   選手名  人数(連番) コーチ名
--------------------------------------------
 A     加藤
 B     山本
 B     渡辺
 B     吉田
 A     佐々木
 A     木村
 C     太田


(*得たい結果)

ランク   選手名  担当数(連番) コーチ名
--------------------------------------------
 A     加藤     1       鈴木
 A     佐々木    2       鈴木
 A     木村     1       橋本
 B     山本     1       田中
 B     渡辺     2       田中
 B     吉田     1       青木

※選手ランク(T_選手マスタ)別に、コーチ名と連番を割り当てたいのですが、コーチにも教えられる人数が限られており、担当数MAXまでしか連番をふれません。担当数を超えると次(下)のコーチ(ランク別)に割り当てたいです。担当者MAXがなく一人のコーチが全員分連番をふれればいいのですが・・・。


 連番を振るだけのコードだけは分かったのですが、どうすれば上手い具合にできますでしょうか??(SQLで方法がありますか?)

'連番のみのコード
Sub DAO_numbers()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fd As DAO.Field
Dim SQL As String
Dim inCount As Integer
Set db = CurrentDb()

SQL = "SELECT * FROM T_選手マスタ ORDER BY ランク"
Set rs = db.OpenRecordset(SQL, dbOpenDynaset)
Set fd = rs.Fields("人数")
If rs.BOF = False Then
rs.MoveFirst
inCount = 1
Do Until rs.EOF
rs.Edit
fd = inCount
rs.Update
inCount = inCount + 1
rs.MoveNext
Loop
End If
rs.Clone: Set rs = Nothing
db.Close: Set db = Nothing
End Sub
(上記コードは使わないのであれば無視しても構いません。)

以上よろしくお願い致します。

お世話になります。
下記の様な条件による連番をふるマクロを組みたいと考えており、
色々考えてたのですがやり方が分からなく困っています。多少複雑だとは思いますが、すみませんが、詳しい方よろしくお願い致します。

内容として、例えばですが野球チームの選手をランク別にあるコーチに割り当てたいとします。

T_コーチマスタ(テーブルA)
ランク  コーチ名  担当数MAX
--------------------------------
 A    鈴木     2←Aランク選手に割り当てたいコーチ
 A    橋本     2←Aラン...続きを読む

Aベストアンサー

#4です

#4の補足にあった

> T_コーチマスタ(テーブルA)

> ランク ヒット数  コーチ名  担当者MAX
> ----------------------------------------
>  A   10     佐藤    3
>  A    3      鈴木    3

は構成がおかしい(?)ので、上記「ヒット数」は考えないことにします。

#2でのVBAで

  While (Not rsB.EOF)
    If (sS <> rsB("ランク")) Then ' ★
      sS = rsB("ランク") ' ★
      rsA.Filter = "ランク='" & sS & "'" ' ★
      i = 1 ' ★
    End If ' ★
    rsB("人数(連番)") = i
    rsB("コーチ名") = rsA("コーチ名")
    rsB.Update
    i = i + 1 ' ★☆★
    If (i > rsA("担当数MAX")) Then ' ★☆★
      rsA.MoveNext ' ★☆★
      i = 1 ' ★☆★
    End If ' ★☆★
    rsB.MoveNext
  Wend

★:選手側「ランク」が変わったか判別して、
 変わっていたら、その「ランク」のコーチを求め直して・・・
 連番を 1 に

★☆★:連番をカウントアップして、
 そのコーチの「担当数MAX」を超えたら次のコーチにして、連番を 1 に

なので

> (最後の3までふられない理由は?)

確認された時の「担当数MAX」が 2 だったのでは・・・と思います。
( 3 を 2 にする処理は入っていないので)

※ 以前は「担当数MAX」でしたが、#4補足では「担当者MAX」になってますね
テーブルは新しく作って変えたけど、VBAで参照しているテーブルは前のまま・・・とか?

この処理での大前提は、選手側のデータは「ランク」で並んでいる必要があります。
「ランク」で並んでいるのなら、そのランク内の並びは???
それを指定してあげればよいです。(それが#3の冒頭に記述したものになります)
割り当てしたい順に並んでいる・・・・並んだ後は「ヒット数」等、確認はしません。
(なお、この前提以前に、1選手1データであること・・・・があります)

コーチの方も、コーチの並び順を指定しておけば、その順は Filter 後も維持されるようです。

回答になっていたでしょうか?

#4です

#4の補足にあった

> T_コーチマスタ(テーブルA)

> ランク ヒット数  コーチ名  担当者MAX
> ----------------------------------------
>  A   10     佐藤    3
>  A    3      鈴木    3

は構成がおかしい(?)ので、上記「ヒット数」は考えないことにします。

#2でのVBAで

  While (Not rsB.EOF)
    If (sS <> rsB("ランク")) Then ' ★
      sS = rsB("ランク") ' ★
      rsA.Filter = "ランク='" & sS & "'" ' ★
      i = 1...続きを読む


人気Q&Aランキング

おすすめ情報