Excel VBA でシートを複製、名称変更、セルの値(日付)を変更・その1
会社で、営業さんの行動予定を毎日Excelの表を使って作成して、プリントアウトして貼りだしているんですが、
毎日の分をコピーして、
しかもシートの左上のセルにある日付を入力し直して…
という気が遠くなりそうな作業を(おばあちゃんが)しています。
時間のあるときにまとめて作成してくれているみたいなんですが、
メンバーが変わったりもするので
「せっかく作ってくれたんですが…」
みたいなことがよく起こります。
これを自動化しました。
実際にはここに行き先が入ります。
塗りつぶしてあるのはメンバー名。
セルA2には日付。
セルB3にはIF関数がはいってて、A2の日付に連動します。
その下のA列にはメンバーとエリア。
一日ごとにシートが分かれていて、1ブックでひと月分。
今回は、シート"1日"を元に、その月の分を日付をいれて複製するように組みました。
Option Explicit '---------- 基本仕様 ---------- ' シートを末尾にコピーする ' シート名を変える ' A2の日付を変える ' 31日までループする Const FIRST_DATE = "2012/12/1" '開始日 Sub 予定表作成() Dim i As Integer Dim firstDay As Date Dim myDate As Date firstDay = FIRST_DATE '1から31までのループ For i = 1 To 30 Worksheets("1日").Copy after:=Worksheets(Worksheets.Count) '1日のコピーを末尾に作る Worksheets(Worksheets.Count).Name = i + 1 & "日" 'コピーしたシートの名前を変える myDate = DateAdd("d", i, firstDay) '日付を1日足して Range("A2").Value = myDate 'A2にいれこむ Next i End Sub
ブックには"1日"のみを用意しておいて、マクロを実行します。
そうするとだーーーーっと31日まで作成されます。
1日は作成してあるので、
カウンタ変数が1は2日にあたります。
なので31日まで作成する時はカウンタ変数が30になります。
31日までない月の場合は、このカウンタ変数を書き換えないといけません。
たとえば開始日と終了日を入力したら
その分だけ作成する、という仕様だと
月の途中からも作れるしいいなぁと思います。
次のステップはそうしたい!!
あと、、はてな記法、ExcelVBAには対応してないんだね。。
※先生に添削してもらってコードを書きなおしたので、
別記します。
Excel VBA でシートを複製、名称変更、セルの値(日付)を変更・その2 - プログラミングお勉強記録