
業務短縮化のために、VBAを使って社内のスケジュール管理ファイルを制作しています。
つくろうとしているのは、こんな感じです。
1、まず、罫線だけのマスター用紙があります。
2、別シートに設置した「スケジュール作成」ボタンをクリックすると、マスター用紙がコピーされ、新しいシートが作成されます。
この新しいシートの「A」列に、自動的にカレンダーが入力されます。
この2の部分をVBAで自動化したいと考えています。
すでにボタン押下→シートをコピーするところはできました。
カレンダーを作るには、月の最終日の日にちと曜日をとればいいのかな?とか予想はしているのですが。。。
手掛かりなどありましたらお願いします
No.1ベストアンサー
- 回答日時:
関数でもできるので参考に
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」を使って作成日の日付をとって・・という感じでしょうか?
正解に近づけそうなのに悔しいのでがんばります!
お二人の間をとって、
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")と指定したら、コンパイルが通らずにエクセルから怒られてしまいました。。。(当たり前でしょうか)
No.2
- 回答日時:
このような質問は実際のシートが見えないので回答しにくいですが、できるだけ汎用的な方法で回答します。
ヒント程度に考えてください。マクロは以下でよいでしょう。カレンダの開始セルは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」を使って作成日の日付をとって・・という感じでしょうか?
正解に近づけそうなのに悔しいのでがんばります!
お二人の間をとって、
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")と指定したら、コンパイルが通らずにエクセルから怒られてしまいました。。。(当たり前でしょうか)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) エクセルでカレンダーを作りたい 5 2023/05/16 07:32
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【ExcelVBA】動的にボタン、ボタン名を生成できますか? 7 2022/04/08 12:54
- Visual Basic(VBA) エクセルVBA 2 2022/04/27 13:29
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Visual Basic(VBA) Excel VBA シートを追加後に余分なシートを削除する、の意味 21 2022/05/19 22:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
Access VBA [リモートサーバー...
-
Accessのスプレッドシートエク...
-
access2021 強制終了してしまう
-
Accessのクエリで、replace関数...
-
ACCESS VBA でのエラー解決の根...
-
access2021 VBA メソッドまたは...
-
accessデータを指定したExcel、...
-
教えてください! アクセスの書...
-
チェックボックスにチェックが...
-
アクセスの更新クエリでカレン...
-
Accessのクエリの印刷設定
-
Access IF文でテーブルに存在し...
-
Accessフォームの配色テーマを...
-
Accessデータベースに含まれる...
-
Accessで作ったデータベースをw...
-
Access で半角スペースと全角ス...
-
Microsoft365にAccessってあり...
-
Accessのクエリの結果を、既存...
-
アクセス テーブルの空白を変数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
ACCESS VBA でのエラー解決の根...
-
Accessのクエリで、replace関数...
-
access2021 強制終了してしまう
-
Access VBA [リモートサーバー...
-
access2021 VBA メソッドまたは...
-
Access VBA を利用して、フォル...
-
Accessデータベースに含まれる...
-
アクセスで、実行時エラー3075 ...
-
Access Error3061 パラメータが...
-
提供されるデータの形式が変わ...
-
Accessのスプレッドシートエク...
-
お助けください
-
accessデータを指定したExcel、...
-
CSVファイルの「0落ち」にVBA
-
Accessのリンクテーブルのパス...
-
accessでlaccdbファイルが削除...
-
Accessのクエリの結果を、既存...
-
Microsoft365にAccessってあり...
-
実行時エラー3131 FROM 句の構...
おすすめ情報