[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『1か月分の日付のシート作成』(よわい)
マクロでボタン1つで、1か月分の日付のシートを毎日(日報)作成し、
月が替わると今月は終了みたいな感じ。
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
>マクロでボタン1つで、1か月分の日付のシートを毎日(日報)作成し、 これは一回の実行で一か月分作成するってことですか? もしそうなら、日報というコピー元シートを用意して実行してください。
Sub test() Dim ws As Worksheet, d As Double, i As Long Set ws = Worksheets("日報") d = DateSerial(Year(Date), Month(Date) + 1, 0) Application.ScreenUpdating = False For i = 1 To Format(d, "d") ws.Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = Month(Date) & "月" & i & "日" Next ws.Select Application.ScreenUpdating = True End Sub
>月が替わると今月は終了みたいな感じ。 これはわかりませんでした。 (フォーキー) 2023/03/21(火) 08:42:23
4月1日が元(シート名)にあって、
クリックするたびに次が4月2日になり、4月は30日間しかないので、
今月は終了みたいな感じがうれしいです。
よろしくお願いいたします。
早々、返答ありがとうございます。
(よわい) 2023/03/21(火) 09:32:08
1 標準モジュールにコードを貼り付ける。(マクロ名は自由に変更してください)
Sub test2() Dim rng As Range, d As Double Set rng = Range("C2") d = DateSerial(Range("A2"), Range("B2") + 1, 0) If rng > CLng(Format(d, "d")) Then rng = rng - 1 MsgBox Format(d, "m月") & "は" & rng & "日までです。" ElseIf rng = 0 Then rng = 1 End If End Sub
2 元シートに年、月、カウント情報用の作業セルを用意する。
(セル番地は実際のシートレイアウトに合わせてください。)
D2 =DATE(A2,B2,C2)
|[A] |[B]|[C] |[D] [1]|年 |月 |カウント|日付 [2]|2023| 4| 30|2023/4/30
2 開発タブの挿入から、フォームコントロールのスピンボタンを挿入する。
3 スピンボタンを右クリックして、マクロの登録からtest2を登録する。
(フォーキー) 2023/03/21(火) 10:26:44
(よわい) 2023/03/21(火) 10:56:25
(よわい) 2023/03/21(火) 11:56:24
スミマセン!!
(よわい) 2023/03/21(火) 13:06:58
>1回の実行でなくて、 >毎日です。
具体的な説明がないので私は降ります。
とりあえず、A1セルに4月1日と入力された「4月1日」シートがあることが前提のコードです。
最新の日付のシートをアクティブにして実行すると、翌日の日付のシートが作成されます。
月の末日になったらそれ以上コピーされないようメッセージが表示されます。
Sub test3() Dim d As Double d = DateSerial(Year(Range("A1")), Month(Range("A1")) + 1, 0) If d < Range("A1") + 1 Then MsgBox Format(d, "m月") & "は" & Format(d, "d") & "日までです。" Else ActiveSheet.Copy after:=ActiveSheet Range("A1") = Range("A1") + 1 ActiveSheet.Name = Format(Range("A1"), "m月d日") End If End Sub (フォーキー) 2023/03/21(火) 13:52:24
(?) 2023/03/21(火) 14:33:28
それ前提で
Private Sub Workbook_Open()
Dim ws As Worksheet, ws原紙 As Worksheet, ws最新 Dim SheetName As String Dim cnt As Long, idx As Long
SheetName = Format(Now(), "m月d日") cnt = Worksheets.Count - 1 For idx = 1 To cnt If Worksheets(idx).Name = SheetName Then Exit Sub Next idx
Set ws原紙 = Worksheets("日報原紙") Set ws最新 = Worksheets(cnt) If Month(ws最新.Name) < Month(SheetName) Then Exit Sub
Set ws最新 = ws原紙.Copy(Before:=ws原紙) ws最新.Name = SheetName
End Sub
をThisworkbookモジュールに貼り付ければ、
ブックを開くたびに日付が変わっていれば新規シートを作成し
月が替わっていたり既にシートが作られていれば作成しないはずです。
日報原紙シートは必ず最後尾で。
(ngk) 2023/03/22(水) 10:31:27
質問者さんが運用ルールをしっかり決めてから相談しないと、 マクロでするにしても散らかった回答集になるような気がします。 ひと月に1ブック作成するなら、 シートテンプレートだけでなく、ブックテンプレートのことも しっかり考えなければならないでしょうね。 空の原簿ブックを誤って作成済みのブックに上書きしてしまったら ひと月分水の泡です。 私のとこの運用例ですと、 ・一つのブックを共有。 ・入力用のシートでデータ入力。 ・記入後、データベースシートにマクロで転記。 ・表示・印刷用シートで名前、日付入力でデータベースから任意の データを出力(これは計算式)。 というやり方で、基本的にシートは入力、データ、出力の三つだけ。 六人分の営業データを十数年一つのブックだけで管理しています。 複数ユーザの同時入力ができない、という難点はありますが。 シートやブック量産しても、後で集計必要な時に通常機能での速やかな 計算はほぼ不可能なので、こういう形式に落ち着きました。 ま、うちの会社は日報データがほぼ数値データで単純だからですけれども。 この方法でやり始めてからは、 >1か月分の日付のシートを毎日(日報)作成し、 なんてことは、恐ろしくてできない。 最近は、昔作りこみしたブックを使っているだけなので、 マクロや計算式のスキルはごっそり抜け落ちちゃったのであった。 (みやほりん) 2023/03/22(水) 17:14:38
(行きずり) 2023/03/22(水) 17:22:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.