[[20121005175518]] 『VBAで条件付き自動採番』(ぼっち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで条件付き自動採番』(ぼっち)

 すみません、教えてください。

 ユーザーフォームからデータシートに転記する際に、「絶対に重複しない番号」を作成して
 データシートに入力したいです。

 例えばユーザーフォームのTextBox1に日付を入力し、「データA」シートのB列に

 2012/10/2
 2012/10/2
 2012/10/1
 2012/10/3
 2012/10/4
 2012/10/3
 2012/10/4
 2012/10/2

 のように入力するとします。
 (日付の並び順は入力するデータの内容によるので、昇順・降順のように並ぶわけではありません)

 ユーザーフォームでコントロールにデータを入力して「データA」シートに転記する際、
 フォーム内のTextBox1に「2012/10/2」の日付が入っていた時、

 「1210020001」

 のように「YYMMDD+枝番4桁」の番号を振り、データAシートのF列に入力したいです。

 なので、上記例に枝番を振るとすると

   B列      F列
 2012/10/2  1210020001
 2012/10/2  1210020002
 2012/10/1  1210010001
 2012/10/3  1210030001
 2012/10/4  1210040001
 2012/10/3  1210030002
 2012/10/4  1210040002
 2012/10/2  1210020003

 のようになり、次にTextBox1に「2012/10/3」と入力したら
 1210030003
 と、該当日付の最大数値の枝番に1を足した番号を自動で採番したいです。
 このように、「該当日付の中で枝番を増やしていく」というようにしたいのですが、
 「データA」シートはユーザーフォームから入力した後、閲覧者が色々な条件でソート
 をしたりするので、「該当日付」の「最大数値の枝番」が昇順に並んでいるわけではありません

 (例)このような並びになっていることもあります

   B列      F列
 2012/10/4  1210040002
 2012/10/2  1210020003
 2012/10/3  1210030001
 2012/10/1  1210010001
 2012/10/2  1210020002
 2012/10/4  1210040001
 2012/10/2  1210020001
 2012/10/3  1210030002
 2012/10/3  1210030003

 これでTextBox1に「2012/10/2」と入力して、次の枝番の値が「0004」になるようにしたいのですが
 条件がややこしくてどのように判定すればよいかわかりません…

 要するに
 ・TextBox1の値と「データA」シートB列に入力済みの値を比較し、一致する値の中で一番大きな枝番に1を足した番号
 を自動で作成したいのですがどのようにすればよいでしょうか。

 自分でも分かりづらい説明だと思います…
 不足部分は補いますのでよろしくお願いします。
 エクセルのバージョンは2007です。

 B列の日付群の中から、対象の日付の数を数える方法は?

 日付が2012/10/4の場合、

 数式では =countif(b:b,"2012/10/4")
 で2012/10/4の個数が求められますから、 
 =countif(b:b,"2012/10/4")+1  が求める枝番

 後は、日付と絡めて書式設定すればよいと思います。

 数式だと

 =TEXT("2012/10/4","yymmdd")&TEXT(COUNTIF(B:B,"2012/10/4")+1,"0000")

 でできそうなので、後はこれをVBAに組み込めばできそうですが・・・

 ichinose


 ichinose様

 あっ!そうか!そうですね!
 同じ日付の個数を数えればいいんですね!
 最大値…に捕らわれてその発想が思いつきませんでした!!
 やってみます!!

 (ぼっち)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.