• ベストアンサー

エクセルで自動採番する方法

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

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! すでに回答は出ていますが・・・ 他の方法の一例です。 ↓の画像で説明させていただくと、 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

その他の回答 (6)

noname#110252
noname#110252
回答No.7

Aについては「ユーザー定義」で「yyyy/mm/dd」にすればOKです。ただし一覧にはありませんので、「種類」の部分にフォームがありますので、そこに直接入れてください。 注意 No.1さんの回答では日付は2桁入力されていますが、できるだけ4桁で入力したほうがいいと思います。 あまり古いPCの場合、「09/8/1」と入力すると、「1997年8月1日」と表示されてしまいます。

ayaco1919
質問者

お礼

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

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.4です! たびたびごめんなさい。 前回の画像の表は数式の訂正前の表をアップしてしまいました。 数式は間違いないと思いますので 敢えて、画像はアップしません。 画像に関しては表の並びだけを参考にしてください。 何度も失礼しました。m(__)m

ayaco1919
質問者

お礼

早急にご対応いただき、ありがとうございました! おかげさまで、教えていただいた関数で無事、成功しました。 心優しい多くの方々から返信を戴くことができ、びっくりするとともにとても感謝しています。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.5

 このような例では、一発でお望みの結果を出す数式を導くのは無理ですね。  結局、いくつかのプロセスを踏む訳ですから、端から補助列にそういう式を立てておくのが簡便かと存じます。 >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 の式が複雑になります。

ayaco1919
質問者

お礼

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

回答No.3

起票日が昇順で並んでいるとして D2セル =LEFT(A2,3) E2セル =TEXT(B2,"yyyymm") F1セル 0 F2セル =IF(E2=E1,F1+1,1) C2セル =D2&E2&TEXT(F2,"000") 添付図参照

ayaco1919
質問者

お礼

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

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

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

ayaco1919
質問者

お礼

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

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

仮に    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関数など配列関数を利用します。 この場合、データが増えていって式を沢山下へコピィした際にパソコンへの負担が増えます。

ayaco1919
質問者

お礼

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

関連するQ&A

専門家に質問してみよう