[[20230321082106]] 『1か月分の日付のシート作成』(よわい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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


希望動作がまったくわからないんですが・・・
元という名前のシートがあって、どこかのセルに4月の日付が入っている。
クリックするたびに日付を翌日に更新していって、その月の末日になれば更新できないようにしたい、ということでしょうか。

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


ありがとうございます。
わかりづらくてすみません!
1,元シート(4月1日)でシート名も4月1日
2,作業セルはあり。
3,フォームコントロールで次の作業セルも4月2日でシート名も4月2日
4,4月は30日しかないので、4月は終了。
でな感じですが、
質問しにくくてすみません。

(よわい) 2023/03/21(火) 10:56:25


まずシートは固定なのか、増やすのかをはっきりしてください。
毎日日報シートを作成するだけならマクロ使わなくてもいいと思いますが。
(右クリックしてコピーして名前変えるだけ)
(フォーキー) 2023/03/21(火) 11:09:07

すみません。
シートは増やしていきます。

(よわい) 2023/03/21(火) 11:56:24


もう一度聞きますが、一回の実行で一か月分作成するんですか?
これ以上具体的な説明がないなら、私は降ります。
(フォーキー) 2023/03/21(火) 12:05:28

何回もすみません。
わかりずらいですよね。
1回の実行でなくて、
毎日です。

スミマセン!!
(よわい) 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


こういうのはコピー元が入力済みの日報だと書き替えたり消すのが面倒だったりするので・・・
まず4月1日のシートを元にシート最後尾に
日報で入力されるべきセルが空白の"日報原紙"のシートを作ってください。

それ前提で

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.