[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日数分をシートコピーしたい』(torao)
お世話になっております。
質問させてください。
ネット等で調べて日報を日数分コピーするマクロを貼りました。
Sub copy()
For i = 1 To 5
c = c + 1
Worksheets("日報").Copy after:=Worksheets("日報")
Worksheets("日報 (2)").Name = c & "日目"
Next
End Sub
これで5日分のシートが出来ましたが、「日報」シートとは別に、
「基本項目」のシートを作成し、工期を入力したいと思います。
「基本項目」
A B C D E 1 工事名 ○○新築工事 2 工期 2016/3/1 から 2016/5/15 まで 3 請負者 株式会社 ○○
上記のような工期があった場合、2ヵ月半のシートをコピーしたいのですが、
どのようにもとのマクロを変更したら良いか、教えていただけませんでしょうか。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
あまり効率はよくないかもしれませんが・・・
Sub test()
Dim 日付 As Date Dim 位置 As Long
Application.ScreenUpdating = False
日付 = Range("B2").Value 位置 = Worksheets("基本項目").Index
Do Worksheets("基本項目").Copy After:=Worksheets(位置) ActiveSheet.Name = Format(日付, "yyyy-m-d") 日付 = 日付 + 1 位置 = 位置 + 1 Loop Until ActiveSheet.Name = Format(Range("D2").Value, "yyyy-m-d")
Application.ScreenUpdating = True
End Sub
スラッシュはシート名に使えないので形式は2016-3-1のようになっています。 (se_9) 2016/03/10(木) 15:19
さっそくの返信ありがとうございます。
頂いたマクロを実行いたしましたが、書き方が拙くて申し訳ありません。
シートをコピーしたいのは「日報」シートで、どんな作業をしたのか記入する様式になっています。
「基本項目」で工期を記入し、その日数分の「日報」シートをコピーしようと思っています。
どうかよろしくお願いいたします。
(torao) 2016/03/10(木) 15:31
いつものトンチンカンな回答をしてしまいました。すみません。
Sub test()
Dim 日付 As Date Dim 位置 As Long
Application.ScreenUpdating = False
日付 = Worksheets("基本項目").Range("B2").Value 位置 = Worksheets("日報").Index
Do Worksheets("日報").Copy After:=Worksheets(位置) ActiveSheet.Name = Format(日付, "yyyy-m-d") 日付 = 日付 + 1 位置 = 位置 + 1 Loop Until ActiveSheet.Name = Format(Worksheets("基本項目").Range("D2").Value, "yyyy-m-d")
Application.ScreenUpdating = True
End Sub (se_9) 2016/03/10(木) 15:38
頂いたマクロでシートコピー出来ました。
本当にありがとうございます。
仕事が捗ります。
また何かありましたらお願いいたします。
(torao) 2016/03/10(木) 15:55
増やしたシートのB4に工期分の日付を入れたいのですが、
平成○○年○月○日(○曜日)←このような形です
シート名からセルに入れてみようと下記の様に変更してみました
ActiveSheet.Name = Format(日付, "gggee"年"mm"月"dd"日"(aaaa)")
コンパイルエラーになってしまい、出来ませんでした。
それとも違う方法がありますでしょうか。
お願いいたします。
(torao) 2016/03/10(木) 16:25
"ggge年mm月dd日(aaaa)" にしてください。 (se_9) 2016/03/10(木) 16:38
ActiveSheet.Name = Format(日付, "ggge年mm月dd日(aaaa)")
このようにやってみましたら、日付以上のシートが大量に出来てしまいました。
なにか他に原因があるのでしょうか…。
何度もすみません。
(torao) 2016/03/10(木) 16:47
Loop Until ActiveSheet.Name = Format(Worksheets("基本項目").Range("D2").Value, "yyyy-m-d") の"yyyy-m-d"も変えましたか?アクティブシートの名前が工期の○○まで(今回のケースだと平成28年05月15日(日曜日))と 合致しなければずっとシートを作成し続けることになります。なので書式を変える際は必ずLoop〜のところも一緒の書式に してください。 (se_9) 2016/03/10(木) 16:54
Do/Loop ではなく For/Next で書いてみました。
Sub 別案() Dim z As Long Dim f As Long Dim t As Long Dim x As Long
Application.ScreenUpdating = False
With Sheets("基本項目") f = .Range("B2").Value2 t = .Range("D2").Value2 End With
z = Sheets("日報").Index
For x = t To f Step -1 Sheets("日報").Copy After:=Sheets(z) On Error Resume Next '念のため ActiveSheet.Name = Format(x, "ggge年mm月dd日(aaaa)") On Error GoTo 0 Next
End Sub
(β) 2016/03/10(木) 18:10
(se_9)様
その部分、直していませんでした…。
今日はもう退社してしまったので、明日やってみます。
(β)様
わざわざありがとうございます。
「Do/Loop ではなく For/Next」 今は違いが分かりませんが、勉強したいと思います。 (torao) 2016/03/10(木) 20:21
Do〜LoopじゃなくてFor〜Nextの方がいいのかなと思っていたらβさんから回答が。 コート提示しておいて何ですが、βさんの方を使ってください。 (se_9) 2016/03/11(金) 07:48
(β)様のマクロを使用したところ増やしたシートのB4に日付を入れたいのですが、
これを原紙であるところの「日報」に
「=RIGHT(CELL("filename",B4),LEN(CELL("filename",B4))-FIND("]",CELL("filename",B4)))」
このような関数をいれてみたところ、やはり日付の欄にすべて「日報」になってしまいました。
工期分のシートをコピーして、ついでに連続した日付も入れたかったんですが、なにか良い方法ありませんでしょうか。
(torao) 2016/03/11(金) 11:54
そんな難しいことをする必要はないですよ。 日報シートの B4 は 空白でOK。表示書式を、お好きなものにしておいてください。
で、ActiveSheet.Name = Format(x, "ggge年mm月dd日(aaaa)") の下あたりに
Range("B4").Value = x を追加してください。
(β) 2016/03/11(金) 12:10
(se_9)様もありがとうございます。
(torao) 2016/03/11(金) 15:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.