まりふのひと

公民館使用日誌作成に使うエクセルデータをVBA化した

公民館使用日誌は、2007年頃から

  1. エクセルで予定表をし、
  2. ワードの差し込み印刷で印刷,
    • 裏面は空の使用日誌を印刷している。
  3. 公民館の書庫に置いてある。
    • 綴じるための穴もあけてある。

作るのを忘れると‥‥ 「ありません!」 と言われるのがつらい、、、



差し込み印刷文書は一度作ればよいが、予定表はそうはいかない。
オートフィルが使えず面倒なのである。
(午前と午後の予定を作る必要がある)

そこで、5月分の予定表で VBA に挑戦した。

 前提
  1. 予め1週間分の予定(上図の使用年月日とクラスで、セルA2:B5 の範囲)を作っておく。
    • 2〜5行目のC列より右は、(関数なので)残しておくこと。
  2. 前回のデータ(上図の6行目以下)は削除しておく。
  3. 例えば1ヶ月分を指定すると、その月の月末までの予定を作成する。4週間分ではない。
 VBA
Sub 公民館使用予定作成()
Dim SDate As Date, EDate As Date, newDate As Date
Dim ii As Long, j As Long
Dim MMCtr As Long, rowCtr As Long

    MMCtr = InputBox("何ヶ月分作成しますか?", , 3)
    SDate = Cells(2, 1)
    EDate = DateSerial(Year(SDate), Month(SDate) + MMCtr, 0)
    For ii = 2 To 5
        SDate = Cells(ii, 1)
        newDate = DateAdd("d", 7, SDate)
        rowCtr = ii + 4
        Do While newDate <= EDate
            Cells(rowCtr, 1) = newDate
            For j = 2 To 10
                    'Cells(rowCtr, j) = Cells(ii, j)では、値がコピーされるのでダメ
                Cells(ii, j).Select
                Selection.Copy
                Cells(rowCtr, j).Select
                ActiveSheet.Paste
            Next
            newDate = DateAdd("d", 7, newDate)
            rowCtr = rowCtr + 4
        Loop
    Next
        
End Sub