• 締切済み

Excelでの採番方法

Excelのユーザーフォームを使って、シートへデータを反映させるマクロを組んでいます。 そこで、データ一つ一つに番号をつけたいのですが、 B列に入力した日付(例:2014/01/06)から年の2ケタだけを参照しA列に14001、14002としていきたいです。 また、年が変わった時に番号もリセットされる方法がわかりません。 B列への入力を(2015/01/06)とした場合に、番号が15001、15002と、1から連番になる方法はありますでしょうか。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 マクロを使わずとも関数でも十分同じ事が出来ます。  まず、連番を表示させるA列のセルの1つに次の様な関数を入力して下さい。 =IF(ISERROR(1/DAY(INDEX($B:$B,ROW()))),"",MOD(YEAR(INDEX($B:$B,ROW())),100)*100+COUNTIF($B:$B,"<"&INDEX($B:$B,ROW()))-COUNTIF($B:$B,"<"&DATE(YEAR(INDEX($B:$B,ROW())),1,1)+COUNTIF($B$1:INDEX($B:$B,ROW()),INDEX($B:$B,ROW())))+1)  次に、上記の関数を入力したセルをコピーして、A列において連番を表示させる全てのセルに貼り付けて下さい。  以上です。

全文を見る
すると、全ての回答が全文表示されます。
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

>B列に入力した日付(例:2014/01/06)から年の2ケタだけを参照しA列に14001、14002としていきたいです。 マクロを使うまでもありません。 B列に日付を入力するとA列にデータ番号が表示される関数式をセットしておくだけで良いと思います。 1行目は項目が記載されるものとして2行目からA列に次の式を入力しておきます。 A2=IF(B2="","",VALUE(CONCATENATE(RIGHT(YEAR(B2),2),TEXT(IFERROR(IF(YEAR(B1)=YEAR(B2),MOD(A1,1000)+1,1),1),"0000")))) A2を下へオートフィルで必要数コピーします。

全文を見る
すると、全ての回答が全文表示されます。
  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.4

No3さんがおっしゃるように、やりたいことがわからない。 データを反映って何? A列に14001.。。。はできますが ”年が変わったときにリセット”ってどういう意味? ”連番になる”ってB列が連番だったら連番になるけど。 ともかくやりたいことが全く不明。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

ん? 「日付シリアル」とは、あなたがB列に記入したい「具体的な日付」のことです。 そもそも あなたが「具体的に何をしたい」のかご相談ではまったく不明瞭なので、適切な回答が出来なくて困ってます。 あなたが言ってるのは「B列に日付を記入したい」「A列に年ごとの連番を振りたい」だけですが、 ○B列に記入する「日付」って?具体的には例えば「今日の日付」でいいんですか。それとも例えばユーザーフォームに何か日付を記入させたのを転記してるとかですか ○B列の「どこに」日付を記入したいんですか。たとえば最下行とかでいいんでしょうか そういった具体的な内容を逐一説明してもらってから具体的なマクロを回答してたんじゃ、いつまでたっても終わりませんので、説明不足については全部こっちで考えて次のようなマクロで回答にします。 private sub CommandButton1_Click()  with cells(rows.count, "B").end(xlup)   .offset(1) = date   .offset(1, -1) = format(date, "yy") * 1000 + application.count(range("B:B")) - application.countif(range("B:B"), "<" & dateserial(year(date), 1, 1))  end with end sub 判らないなら勝手に改変しないで、まずそのまま使ってください。 実際に動かしてみた後、意図と違うところは適切に応用してください。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 単純に・・・ あらかじめA列に数式を入れておいてはダメですか? ユーザーフォームのコマンドボタン押下で、B列の2行目以降にシリアル値が入るとします。 A2セルに =IF(B2="","",MOD(YEAR(B2),100)*1000+SUMPRODUCT((YEAR(B$2:B2)=YEAR(B2))*1)) という数式を入れオートフィルでずぃ~~~!っと下へコピーしておいても大丈夫だと思います。 ※ セルの左上に出現するエラーチェックオプションのマークが目障りであれば メニュー → ファイル → オプション → 数式 → 「エラーチェックルール」 → 「領域内のセルを除いた数式」と「空白セルを参照する数式」のチェックを外しておきます。 ご希望の方法でなかったらごめんなさいね。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

ふつーに「その年の件数」を数えるだけです。 作成例: with cells(rows.count, "B").end(xlup).offset(1) .value = B列に入力したい日付シリアル .offset(0, -1) = format(.value, "yy") * 1000 + application.countif(range("B1:B" & .row), "<=" & .value) - application.countif(range("B1:B" & .row), "<" & dateserial(year(.value), 1, 1)) end with

raula
質問者

補足

ありがとうございます。 すみません。B列に入力したい日付シリアルというものがいまいちよくわかりません。どのようにすればよろしいでしょうか。 教えていただいたコードですが、《》を削除して張り付けすればよろしいでしょうか。 再度御教授頂けますと幸いです。 《with Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = txt番号.Value≫ .Offset(, 1).Value = txt年月日.Value .Offset(, 2).Value = combo担当.Value

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 自動採番について

    初心者です。 Access2000で銀行管理DBを作っています。 (1)テーブルを入金用と出金用それぞれに作成 (2)データ入力用フォームもそれぞれに作成します。 入力にあたって入力番号を自動採番にしたいと考えてますが、番号の構成は数値10桁で、"年" + "月" + "連番"の組み合わせにしたいのです。例:2003070001 入金用と出金用それぞれ別に入力番号をつけます。 これを実現するために「採番テーブル」を別に作成しなければいけないようですが、 (1)採番テーブルの定義の方法 (2)入力フォームで自動採番するためのVBA記述の方法 についてアドバイスいただけないでしょうか? よろしくお願いします。

  • Accessで指示書番号の自動採番

    入力フォームで指示書番号が自動採番され、テーブルにも保存されるようにするための方法を教えていただけないでしょうか。 テーブル:T_指示書 フィールド:指示書番号 フィールドはテキスト型で、番号の構成は8桁の番号で "年(二桁)" + "月(二桁)" +"部署番号(一桁、固定の数字)"+ "連番(三桁)" (例:09091001) という感じで、 年月が変われば、連番が001になるようにしたいです。 どなたか、ご教授いただければありがたいです。 よろしくおねがいします。 Access2002 winXP

  • エクセルの関数で自動採番する方法を教えてください

    【エクセルのデータ例】 A B C 1 1 あああ 2 2 いいい 1 3 あああ 3 4 ううう 4 5 えええ 4 6 えええ 5 7 おおお 上記のようにデータが入っていた時、A列に「重複しているものには同じ番号を自動で入力する」という関数を入れたいのですがどのようにすればよいでしょうか? マクロの場合はほとんど知識が無いので、詳しく教えていただきたいです。 よろしくお願いします。

  • エクセルで採番できる関数

    エクセルで自動採番できる関数式がうまくできずに困っています。 考えている採番の流れは以下のとおりです。 1.B列に日付が入ると、A列に自動採番される 2.採番の値は「年月6桁」+「-(ハイフン)」+「2桁の番号」(例:201407-01) 3.「2桁の番号」は、登録の順番ごとにカウントする(例:01,02,・・・10,11・・・) 4.「2桁の番号」は、次の月に変わると1からカウントし直す(例:201407-18、201408-01) いろいろ組み合わせて下記のようなものを作ってみたのですが、うまくできません。 A2=IF(B2="","",CONCATENATE(YEAR(B2),TEXT(MONTH(B2),"00")&"-"&TEXT(IFERROR(IF(MONTH(B1)=MONTH(B2),MOD(A1,10)+1,1),1),"00"))) うまく採番できる関数式を教えて下さい。 よろしくお願い致します。

  • Excel 2007 マクロ 文字列の抽出について

    Excel 2007 マクロ 文字列の抽出について 元データのB列(番号)に5桁、3桁、7桁の数字が入っています。 その番号をSheet2にコピーして貼り付けます。 貼り付ける際に、5桁、3桁、7桁をそれぞれの列に入れます。 Sheet2のB列(番号2)で400番台はF列(種別)に国産 同じくB列(番号2)で900番台はF列(種別)に外国産 を反映するようにしたいです。 どのようなマクロになりますでしょうか。 サンプルがございましたら、お教えください。

  • 自動で採番と日付を入力するマクロ

    Sheet1のC列に何かを入力すると、A列に1から番号が振られていき、B列には入力した日付が 入っていくマクロを作りたいです。ご教授教えていただければ幸いです;

  • エクセルで、○について連番を自動で振るには?

    エクセルで、○と入力したら、○の数の連番を振ることはできますか? エクセル初心者です。 _ A列 1 ○1 2 ○2 3 4 ○3 5 6 ○4 出来ればつけた連番は○より小さくなるとありがたいです。 B列ではなく、A列の○の右横に反映させたいです。 マクロなら可能でしょうか?

  • エクセルの1シートを項目別に別シートへ分ける方法

    エクセル2010で1シートのデータを項目別に別シートへ自動的に分割する方法で困っています。 検索するとマクロを使うと書いていますが、マクロはほとんど使ったことが無いのもあって、わかりませんでした。 シート1 A列(日付8ケタ+商品番号6ケタ) B列(売上額) 20130515000004           300 20130515000006           100 20130518000004           300 20130519000001           500 20130519000004           300 ・・・                   ・・・ をA列の日付部分上8ケタを使って日別にシートを分け、 シート名をuriage20130515(uriageと日付8ケタ)という名前にしシート名+CSV形式で保存したいです。 シート2 シート名:uriage20130515 A列         B列 20130515000004 300 20130515000006 100 シート3 シート名:uriage20130518 A列         B列 20130518000004 300 シート4 シート名:uriage20130519 A列         B列 20130519000001 500 20130519000004 300 このように自動で別シートに分割した上で、シート名CSV形式で保存まで自動でできるとありがたいです。 自動化できるならシートを分割するマクロ、シート名でCSV保存するマクロが一つのマクロになっていても、分かれていてもOKです。 このようなことはできますか? よろしくお願いします。

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

    こんばんわ、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で値と値をくっつけたり、+1する方法を教えてください

    添付した画像のような表を作成しています(添付用に加工しています) A列とB列は、手入力します。  A列:2桁の半角英数  B列:3桁の半角英数 C列に入るものは、  11(固定された数字)+A列の値+B列の値+001から始まる連番 ですので、3行目でいうとC3に「11 A1 B22 001」(分かりやすく半角スペースを空けています)      4行目ですとC4に「11C3D44002」 という値をA列、B列に入力をしたら、C列に上記のような10桁の値を 自動で入力されるしたいのですが、関数などで行うことでできないものかと思い質問しました。 現状は、C列も手入力で行っておりまして、  ・最初の2桁は、固定数値  ・A列とB列の値を使用している  ・最後の3桁は001からの連番を使用している    ※終わり3桁は無条件で001~の連番にしている もし関数などで対応可能でありましたら、どのような数式にすればよいのか ご教示頂けるとありがたく思います。 よろしくお願い致します。

専門家に質問してみよう