• ベストアンサー

マクロによるシートのコピーについて教えてください

検査成績表をエクセルで作成しようと考えています。 出荷数量・ロット番号を入力したとき、あらかじめ作っておいたブランクの検査成績表(シート)を自動的に複数コピーし、出来たシートにデータを入力します。例えば20個単位で検査表を作成する場合、出荷が110個であれば6枚ブランクシートを発行し、シート上のロット番号欄に-1~-6と枝番をつけます。入門書をざっと見ましたが、理解力不足もあり時間がありません。是非お教え願います。

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

  • ベストアンサー
  • moon00
  • ベストアンサー率44% (315/712)
回答No.2

こんな感じでしょうか。 シート1のb1に出荷数量、b2にロット番号、 その後ろに成績表原本(ここではシート名を「原本」としています) 成績表のa1にロット番号-枝番入力としています。 ------------------------------------------------- Sub Macro1() Dim Vol As Integer Dim Lot As Variant Dim Fre As Integer Dim i As Integer Dim Sname As String Vol = Range("b1").Value '出荷数量が入力されたセル Lot = Range("b2").Value 'ロット番号が入力されたセル Fre = Application.Ceiling(Vol / 20, 1) '必要シート枚数算出(ここでは20個単位) For i = 1 To Fre '必要枚数コピー Sheets("原本").Copy after:=Sheets(i) ActiveSheet.Name = Lot & "-" & i 'シート名をロット番号-枝番に Range("a1").Value = Lot & "-" & i 'ロット番号欄(a1)に番号を入力 Next Sheets("Sheet1").Select '最初のシートに戻る End Sub ------------------------------------------------- ここから自分の環境に合うように変更していただければいいのですが、 どうでしょうか・・・

TIGER1
質問者

お礼

こんなにも早く回答いただいて本当にありがとうございました。 実際に確かめてみて、分かりました。 実務に適合できるよう、変更してみます。 今後ともよろしくお願いします。

その他の回答 (3)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.4

変数に範囲がありますので型をIntegerからLongにすれば 大丈夫だと思います。 ちなみにEXCELにもいくつか制限がありますので確認して 下さい。

参考URL:
http://www.relief.jp/itnote/archives/000579.php
TIGER1
質問者

お礼

何度もご回答いただきありがとうございました。 落ち着いたら、もっと詳しく勉強しようと思います。

  • moon00
  • ベストアンサー率44% (315/712)
回答No.3

一応のたたき台にはなったみたいですね。 申し訳ないのですが、#2のコード内で「Dim Sname As String」は 削除してください。 このマクロ内では使用していない変数ですので。

TIGER1
質問者

補足

ありがとうございます。予定のフォームに組み入れたところ、実際の1000万個単位の出荷数量を入れると、オーバーフローのようなエラーメッセージが現れました。まだしっかり確認していませんので自信がありませんが、桁数が多すぎる場合があるのでしょうか。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

例えで余計に分からなくなりましたが、 シートのコピーは下記のとおりです。 例:コピー元シートの後ろにコピー Worksheets("シート名").Copy After:=Worksheets("シート名")

TIGER1
質問者

お礼

質問を出してからたった1時間で回答いただきありがとうございました。 質問させていただいた意味は検査表のコピー数を「出荷総数/検査ロットの大きさ」とするものでした。分かりづらい質問で申し訳ありませんでした。

関連するQ&A