プロが教える店舗&オフィスのセキュリティ対策術

「管理対象区分(カラムA)」、「起票日(カラムB)」を使って、「ID(カラムC)」に自動採番したいのですが、効果的な関数をご教示いただけないでしょうか。
ID採番のロジックは以下の通りです。
(1)(「管理対象区分」の頭文字3桁) + (2)(「起票日」のYYYYMM) + (3)(「起票日」が同月内であれば同月の通し番号、翌月であれば「001」から振り直し)
<特記事項>
A. (2)について、MMが一桁の場合でも、2桁表示したい(例:1月⇒01)
B. (3)について、常に3桁で表示したい

ご回答いただけると幸いです。
よろしくお願いいたします。

A 回答 (7件)

こんばんは!


すでに回答は出ていますが・・・
他の方法の一例です。

↓の画像で説明させていただくと、

C2セルに
=IF(A2="","",LEFT(A2,3)&TEXT(B2,"yyyymm")&TEXT(ROW(A1),"000"))
という数式を入れています。
(この数式は1行目限定になります)

次にC3セルに
=IF(A3="","",IF(MONTH(B3)=MONTH(B2),LEFT(A3,3)&TEXT(B3,"yyyymm")&TEXT(RIGHT(C2,3)+1,"000"),LEFT(A3,3)&TEXT(B3,"yyyymm")&TEXT(ROW($A$1),"000")))
という数式を入れて、オートフィルで下へコピーすると
画像のような感じの表になります。

以上、参考になれば幸いですが、
他に良い方法があれば軽く読み流してくださいね。m(__)m
「エクセルで自動採番する方法」の回答画像4
    • good
    • 0

Aについては「ユーザー定義」で「yyyy/mm/dd」にすればOKです。

ただし一覧にはありませんので、「種類」の部分にフォームがありますので、そこに直接入れてください。

注意
No.1さんの回答では日付は2桁入力されていますが、できるだけ4桁で入力したほうがいいと思います。
あまり古いPCの場合、「09/8/1」と入力すると、「1997年8月1日」と表示されてしまいます。
    • good
    • 0
この回答へのお礼

こんにちは。
お礼が遅くなり、大変申しわけないです。
丁寧な回答に大変感謝しております!

お礼日時:2009/09/03 00:39

No.4です!


たびたびごめんなさい。

前回の画像の表は数式の訂正前の表をアップしてしまいました。
数式は間違いないと思いますので
敢えて、画像はアップしません。

画像に関しては表の並びだけを参考にしてください。

何度も失礼しました。m(__)m
    • good
    • 0
この回答へのお礼

早急にご対応いただき、ありがとうございました!
おかげさまで、教えていただいた関数で無事、成功しました。

心優しい多くの方々から返信を戴くことができ、びっくりするとともにとても感謝しています。

お礼日時:2009/08/18 14:54

 このような例では、一発でお望みの結果を出す数式を導くのは無理ですね。


 結局、いくつかのプロセスを踏む訳ですから、端から補助列にそういう式を立てておくのが簡便かと存じます。

>ID(カラムC)
とのことですが、カラムC・Dに補助列を挿入し、ID(カラムE)という考え方でいってみましょうか。

レコード1:管理対象区分(カラムA)、起票日(カラムB)、補助列1・2(カラムC・D)、ID(カラムE)
C2:
=LEFT(A2,3) & TEXT(B2,"yyyymm")
D2:
=COUNTIF(C$1:C1,C2)+1
E2:
=C2 & TEXT(D2,"000")

として、C2:E2 と下方向にコピーします。

※)カラムB の「起票日」が日付順に並んでいない場合で、日付順に通し番号を付けたい場合は、E2 の式が複雑になります。
    • good
    • 0
この回答へのお礼

こんにちは。
お礼の言葉が重複してしまいますが、短期間にご回答いただき、ありがとうございました!
大変たすかりました。

お礼日時:2009/08/18 14:59

起票日が昇順で並んでいるとして


D2セル =LEFT(A2,3)
E2セル =TEXT(B2,"yyyymm")
F1セル 0
F2セル =IF(E2=E1,F1+1,1)
C2セル =D2&E2&TEXT(F2,"000")
添付図参照
「エクセルで自動採番する方法」の回答画像3
    • good
    • 0
この回答へのお礼

こんにわは。
お礼が大変遅くなってしまいましたが、ありがとうございました!
丁寧な回答にとても感謝しています。

お礼日時:2009/09/03 00:35

C1セルには次の式を入力して下方にオートフィルドラッグします。


日付が前後して入っていても対応できます。
=IF(COUNTA(A1:B1)<>2,"",LEFT(A1,3)&TEXT(B1,"yyyymm")&TEXT(SUMPRODUCT((YEAR(B$1:B1)=YEAR(B1))*(MONTH(B$1:B1)=MONTH(B1))*1),"000"))
    • good
    • 0
この回答へのお礼

お礼が遅くなり、大変申し訳ありません。
迅速にご回答いただき、大変助かりました。

お礼日時:2009/09/03 00:36

仮に 


  A       B    C
管理対象区分 起票日  採番
AAASSS    09/7/31
BBBSSS    09/8/1
・・・・として
1)(「管理対象区分」の頭文字3桁)は =LEFT(A2,3)で求められます。
2)(「起票日」のYYYYMM) は =TEXT(B2,"yymmdd") で求められます。
ここまでは大丈夫でしょうか?
3)(「起票日」が同月内であれば同月の通し番号、翌月であれば001」から振り直し)
これが厄介です。もしデータが起票日順に並んでいるのであれば
  A     B    C
管理対象区分 起票日
        2001/1/1 とダミーの日付として極端に小さい日付を一つ入れておく。
AAASSS    09/7/31
BBBSSS    09/8/1
=TEXT(ROW()-MATCH(DATE(YEAR(B2),MONTH(B2),0),B:B),"000")
で下へコピィしてみてください。
ここまでうまく行きましたら3つの式を&でつなげると良いです。
もしデータが起票日順でなくばらばらであれば、SUMPRODCUT関数など配列関数を利用します。
この場合、データが増えていって式を沢山下へコピィした際にパソコンへの負担が増えます。
    • good
    • 0
この回答へのお礼

こんにちは。
お礼が遅くなり、大変申し訳ありません。
迅速にご回答いただき、大変感謝しています!

お礼日時:2009/09/03 00:37

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