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『EXCEL』アウトライン設定時に連番をふりたい。

EXCELで、部分的にアウトラインのグループ化を行い、その、目に見えている状態のみで
一気に連番をふりたいのですが、このままオートフィルで連番をつけようとすると
折りたたまれて見えていないところまで連番がふられてしまいます。
目に見えているところだけ連番にしたいのですが、どう操作すれば良いのでしょうか?
ご指導の程、よろしくお願いします。

Aベストアンサー

例えばA列にデータが入力されていて、
見えている行にはすべて何かしらかの
値(文字や数値)が入力されているならば、

例えば、D列に連番を振りたければ、
D1に
=SUBTOTAL(103,$A$1:A1)
と入力し、
以下オートフィルまたはコピー&ペーストしてください。

ただし、
折りたたみを解除すると連番が振り直されてしまいますので、
もし、連番を保持したいのであれば、もう一度折りたたみ、
D列を選択し、「コピー」
「編集」→「形式を選択して貼り付け」で「値」にして「OK」
にしてください。

もう一度、折りたたみを解除して確認すると、連番は保持されて
いますが、折りたたみの部分は一定値が保持されていると思います。

これで、OKであればそれでいいのですが、
もし、ここを空白にしたいのであれば、
アイデアがありますので、必要であればコメントください。

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

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

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

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

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

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

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

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

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

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

Aベストアンサー

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

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

QExcelの連番をふりなおす

Excelの表で、A列に連番をつけてあります。
行を挿入したり、削除したときに、連番がくずれないように
自動的にふりなおす方法があれば、教えていただけないでしょうか。
ヨロシクお願いします!!!

Aベストアンサー

例えばA3セルから下方向に1,2,3,4…と連番を入れるとします。
A3セルには
 =ROW()-2
と入力して下方向にコピーします。

行を削除しても連番は崩れません。行挿入したときはさすがに自動では関数が入力されませんが、上下のセルをコピーすれば連番となります

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

ACCESS2000です。

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

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

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

Aベストアンサー

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

QExcelで飛ばし連番

Excelで連番をふりたいのですが、下記のようなことは可能でしょうか?

A列に曜日、B列に連番なのですが、
土曜日と日曜日は飛ばしたいのです。
連番が1000ほど続くので、何かいい方法はないかと考えています。
宜しくお願いいたします。

  A B
1 月  1
2  火  2
3 水  3
4  木  4
5 金  5
6 土
7 日
8  月  6
9 火  7
  ・  ・
  ・  ・
  ・  ・

Excel2002を使用しています。

Aベストアンサー

A列に日付があるとします。すなわちA列は日付シリアル値が入っているとします。文字列だと直接はダメですが。
C2に
=IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)=7),"",MAX($B$1:B1)+1)
と入れて月末まで式を複写する。
結果
2007/3/1 1
2007/3/2 2
2007/3/3
2007/3/4
2007/3/5 3
2007/3/6 4
2007/3/7 5
2007/3/8 6
2007/3/9 7
2007/3/10
2007/3/11
2007/3/12 8
以下略。
曜日の文字を使うならB列は、=TEXT(A2,"aaa")で文字列の「値」にしてください。表示形式ではダメ。

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 + ...続きを読む

QExcel上でのデータ数字が連番であることを確認する方法を教えてくださ

Excel上でのデータ数字が連番であることを確認する方法を教えてください。

ある列に数字5桁で、00001,00002・・・と数字が約30000件並んでいますが、
これが重複や漏れなく正しく連番が付与されることを確認したいと考えています。

目視で1件ずつ見る以外に、関数等を使って検証する方法は無いでしょうか?
Excelは2003です。
どなたか良いアドバイスをお願いします。

Aベストアンサー

列内の1行ごとの差は「1」になるはずですね。
例えば a2-a1という式をすべてに投入すれば、条件を満たしていればすべての差が「1」です。
 あとはフィルターで「1」以外の答えが入っているかどうかを確認すればいいのではないでしょうか。

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

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

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

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

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

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

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

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

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

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

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

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

Aベストアンサー

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

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

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

Qexcelの関数かマクロで連番、日付を付けたい

こんばんわ、EXCELマクロ入門者です。
excelの関数かマクロ、VBAで日付や、連番を付けたいです。
できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。
(1)まず、B2に商品名を入れます。
(2)すると、A2に連番、C2に今日の日付(システム日付)、
D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。

A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、
C列の日付(today関数やnow関数ではファイルを開き直すと日付が変わってしまう)とD列の商品名-日付-商品ごとの連番で特に困っています。

イメージとしては下のような感じです。
  A   B    C     D
1 連番 商品名 日付    商品名-日付-商品ごとの連番
2 1   ○○○ 2007/8/10  ○○○-2007/8/10-1
3 2   ××× 2007/8/12  ×××-2007/8/12-1
4 3   △△△ 2007/8/13  △△△-2007/8/13-1
5 4   ○○○ 2007/8/15  ○○○-2007/8/15-2
6 5   ○○○ 2007/8/16  ○○○-2007/8/16-3

どなたか、ご教授ください。
どうぞ、宜しくお願い致します。

こんばんわ、EXCELマクロ入門者です。
excelの関数かマクロ、VBAで日付や、連番を付けたいです。
できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。
(1)まず、B2に商品名を入れます。
(2)すると、A2に連番、C2に今日の日付(システム日付)、
D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。

A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、
...続きを読む

Aベストアンサー

>C2に今日の日付(システム日付)
を入れるのであれば関数では実現できません。VBA(マクロ)が必要になります。
でもB列の日付、D列の商品・日付・連番までVBAで書き込むのはうまい方法とは言えません(理由は後述)。VBAでは日付だけ書き込んで、A列、D列は関数で表示させるのが良いと思います

B列の値が変更されたとき、C列に日付を書き込むマクロは以下です。このマクロはデータを入力するシートの「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("B2:B65536")) Is Nothing Then
  If Target.Cells(1, 1).Value = "" Then
   Target.Offset(, 1) = ""
  Else
   Target.Offset(, 1) = Date
  End If
 End If
End Sub

A2セルの関数式は
 =IF(B2="","",ROW()-1)
D2セルの関数式は
 =IF(B2="","",B2&"-"&TEXT(C2,"YYYY/MM/DD")&"-"&SUMPRODUCT((B$2:B2=B2)*(C$2:C2=C2)))
A2,D2ともに下方向にコピーしてください

補足
VBAでシートのSelection_Changeイベントを使って、「B列が変更されたらA列、D列にデータを書き込む」のは簡単にできます。
でも10行目までデータを入力した後、2行目に戻って商品名を直したらどうなりますか?

VBAで2行目の連番はふり直されますが、3行目~10行目の連番ふり直しは普通しません。(毎回全行のふり直しをするようVBAを書けば別ですが、普通そんな無駄な処理にはしないでしょう)
ですから特にD列のデータ書き込みはVBAではなく、シートの値によって自動的に更新される関数式の方がよいのです

>C2に今日の日付(システム日付)
を入れるのであれば関数では実現できません。VBA(マクロ)が必要になります。
でもB列の日付、D列の商品・日付・連番までVBAで書き込むのはうまい方法とは言えません(理由は後述)。VBAでは日付だけ書き込んで、A列、D列は関数で表示させるのが良いと思います

B列の値が変更されたとき、C列に日付を書き込むマクロは以下です。このマクロはデータを入力するシートの「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください

Private Sub Worksheet_Cha...続きを読む

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ランキング