dポイントプレゼントキャンペーン実施中!

業務短縮化のために、VBAを使って社内のスケジュール管理ファイルを制作しています。
つくろうとしているのは、こんな感じです。

1、まず、罫線だけのマスター用紙があります。
2、別シートに設置した「スケジュール作成」ボタンをクリックすると、マスター用紙がコピーされ、新しいシートが作成されます。
この新しいシートの「A」列に、自動的にカレンダーが入力されます。

この2の部分をVBAで自動化したいと考えています。
すでにボタン押下→シートをコピーするところはできました。
カレンダーを作るには、月の最終日の日にちと曜日をとればいいのかな?とか予想はしているのですが。。。
手掛かりなどありましたらお願いします

A 回答 (2件)

関数でもできるので参考に


A1=2007、B1=12
A2に=DATE($A$1,$B$1,1)
A2に =IF(A2="","",IF(A2+1>DATE($A$1,$B$1+1,0),"",A2+1))
以下32行目まで式を複写する。
これで1か月分の日付が出る。
ーー
VBAでこの部分は(ついでに曜日も出した)
Sub test01()
y = Cells(1, "A")
m = Cells(1, "B")
For i = 2 To 32
Cells(i, "A") = DateSerial(y, m, i - 1)
Cells(i, "B") = Format(DateSerial(y, m, i - 1), "aaa")
If DateSerial(y, m, i - 1) = DateSerial(y, m + 1, 0) Then End
Next i
End Sub
ーー
人により色々なコードの組み方がありそう。
上記での、ポイントは終了脱出条件のDateSerial(y, m + 1, 0)
で月末日を出している0の部分です。

この回答への補足

すみません。補足です。
日付の入力するのはA6からです。
あと、12月中に1月のカレンダー・・・というように、基本的に1ヵ月先のものを制作します。
教えていただいたものだと、「DateSerial」を使って作成日の日付をとって・・という感じでしょうか?

正解に近づけそうなのに悔しいのでがんばります!

補足日時:2007/12/18 15:07
    • good
    • 1
この回答へのお礼

お二人の間をとって、

Sub Sheet_Copy()

Worksheets("ワークシート").Copy After:=Worksheets("ワークシート")
y = Cells(3, "C")
m = Cells(3, "D")
For i = 1 To 31
Cells(i + 7, "A") = DateSerial(y, m, i - 1)
Cells(i + 7, "B") = Format(DateSerial(y, m, i - 1), "aaa")
If DateSerial(y, m, i - 1) = DateSerial(y, m + 1, 0) Then End
Next i


End Sub

というふうにしてみました。
(シート内の「3C」に作成したい予定表の年を入力、「3D」に月を入力します)
すると一応指定したセル内に日付が収まるんですが・・。
例えば、2007年の11月を指定すると、1行目が10月31日になってしまいます。。。(水曜日?なのに)

あと、スケジュール帳は部内で共有するため、

>(シート内の「3C」に作成したい予定表の年を入力、「3D」に月を入力します)

↑の部分をできれば「スケジュールの作成」ボタンとともに別ワークシートに設定したいと思います。(このワークシートは後ほど、管理者しか見られないように設定します)
そこでy = Cells(3, "C","sheet1")と指定したら、コンパイルが通らずにエクセルから怒られてしまいました。。。(当たり前でしょうか)

お礼日時:2007/12/18 16:59

このような質問は実際のシートが見えないので回答しにくいですが、できるだけ汎用的な方法で回答します。

ヒント程度に考えてください。

マクロは以下でよいでしょう。カレンダの開始セルはA3としています。

Sub Macro1()
 Worksheets("Master").Copy After:=Worksheets("Master")
 ActiveSheet.Name = Format(Date, "YYYY") & "年" & Format(Date, "MM") & "月"
 ActiveSheet.Range("A3").Value = Date - Day(Date) + 1
End Sub

マスタシートのA4セルには
 =IF(MONTH($A$3+ROW(Z1))=MONTH($A$3),$A$3+ROW(Z1),"")
を貼り付けて、下方向に30行分コピーして、セルの書式を日付形式にします。
マクロを実行するとA3セルと同じ月の日付列が生成されるはずです。

この回答への補足

すみません。補足です。
日付の入力するのはA6からです。
あと、12月中に1月のカレンダー・・・というように、基本的に1ヵ月先のものを制作します。
教えていただいたものだと、「Date」を使って作成日の日付をとって・・という感じでしょうか?

正解に近づけそうなのに悔しいのでがんばります!

補足日時:2007/12/18 15:02
    • good
    • 0
この回答へのお礼

お二人の間をとって、

Sub Sheet_Copy()

Worksheets("ワークシート").Copy After:=Worksheets("ワークシート")
y = Cells(3, "C")
m = Cells(3, "D")
For i = 1 To 31
Cells(i + 7, "A") = DateSerial(y, m, i - 1)
Cells(i + 7, "B") = Format(DateSerial(y, m, i - 1), "aaa")
If DateSerial(y, m, i - 1) = DateSerial(y, m + 1, 0) Then End
Next i


End Sub

というふうにしてみました。
(シート内の「3C」に作成したい予定表の年を入力、「3D」に月を入力します)
すると一応指定したセル内に日付が収まるんですが・・。
例えば、2007年の11月を指定すると、1行目が10月31日になってしまいます。。。(水曜日?なのに)

あと、スケジュール帳は部内で共有するため、

>(シート内の「3C」に作成したい予定表の年を入力、「3D」に月を入力します)

↑の部分をできれば「スケジュールの作成」ボタンとともに別ワークシートに設定したいと思います。(このワークシートは後ほど、管理者しか見られないように設定します)
そこでy = Cells(3, "C","sheet1")と指定したら、コンパイルが通らずにエクセルから怒られてしまいました。。。(当たり前でしょうか)

お礼日時:2007/12/18 16:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!