[[20210513150941]] 『シート名の増加』(愛子) ページの最後に飛ぶ

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

 

『シート名の増加』(愛子)

お世話になります。

日報1日から31日のシート名をVBAで作成したいのです。

シート1には、日報の表があります。

シート1の表と同じものが、マクロを実行すればシートが追加され 
結果、シート1を残し次の右シートから各シート名が”1日”から"31日"
迄(各シートには同じ日報の表が作られます。)にしたいと思って色々調べ
下記VBAを探しました。
Sub test()

     Dim k As Long

     For k = 1 To Day(WorksheetFunction.EoMonth(Date, 1))
         Sheets("a").Copy after:=Worksheets(Worksheets.Count)
         ActiveSheet.Name = k & "日"
     Next
 End Sub

しかし実行すれば1日から30日迄で31日がありません。
質問1、どこをなおしていいか、わからなくなりましたので教えて頂けない
    でょしょうか?

質問2、シート1のa1セルに日報の日付を入れたいのです。
    例えば令和 年 月 日 と記載ます。
    
    マクロが実行されれば、
    シート名”1日”のa1セルに自動的に令和3年5月1日と
    表示され、シート名”2日”のa1セルには、令和3年5月2日と
    最後、シート名”31日”のa1セルには、令和3年5月31日と
    なるイメージです。(出来ましたら当月の31日もしくは30日の
    大小の日迄。)

    次に月が変われば当該の月に、年が変われば当該の年に置き換わる
    ように教えていただきたいのですが。

質問3、上記の質問1,2を含まえ、月報(1月から12月)に置き換えた
    場合のVBAを教えていただけないでしょうか?

以上、よろしくお願いします。

    

< 使用 Excel:Excel2013、使用 OS:Windows10 >


EODATE(Date,1)= 来月の月末日
(砂糖) 2021/05/13(木) 16:28

EOMONTHでしたごめんなさい
まぁ今月なら引数は0ですね
(砂糖) 2021/05/13(木) 16:29

 Sub test()
     Dim k As Long
     Application.ScreenUpdating = False
     For k = 1 To Day(WorksheetFunction.EoMonth(Date, 0))
         Sheets("a").Copy after:=Worksheets(Worksheets.Count)
         ActiveSheet.Name = k & "日"
         Range("A1").Value = WorksheetFunction.EoMonth(Date, -1) + k
         Range("A1").NumberFormatLocal = "ggge年m月d日"
     Next
     Application.ScreenUpdating = True
 End Sub

  >質問3、上記の質問1,2を含まえ、月報(1月から12月)に置き換えた
  >    場合のVBAを教えていただけないでしょうか?

  それだけの説明では、何がどうなればいいのか明瞭に伝わってこないです。

(半平太) 2021/05/13(木) 17:06


お返事が遅くなり誠に申し訳ございませんでした。

砂糖様、有難うございました。

EoMonth(Date, 0))ネットで調べましたら当月は、0ですね。−は、前月ですね。

半平太さん
有難うございました。

上記VBAを走らせますと、シート名:aの右からシート名:1日から31日までうまくいくんですが、
日報の日付が、シート名:2日 のところに令和3年5月1日になっています。ずーと来て最後シート名:
31日のところで、日報の日付が令和3年5月30日となり シート名:a は、日報の日付が31日と
なっています。色々触ったのですが思うようにいきません。教えてください。

質問3、につきましては日報がわからないので月報のVBAは、作っていませんので、
    半平太さんに作って頂いたVBAを元に下記コードの2箇所を変更しましたが、
    実行すれば1月から5月までシートが作成されました。?
    
    For k = 1 To Dayをmonth に変更済み

         ActiveSheet.Name = k & "日" を"月"に変更済み

  月報のVBAの作成の折、月報の日付は、変動しますので、コードを省こうとしましたが、
  うまく行きません、すみませんが省いて頂けますでしょうか?

 

(愛子) 2021/05/13(木) 20:17


Month(EoMonth(Date,0))ってことかな?
これの値って今月の月だから5でしょ
普通にk=1 to 12でいいと思います
(砂糖) 2021/05/13(木) 20:20

砂糖さま
上記、そういうことですね。
早速してみます。
有難うございます。

今、衝突しましたアップですが、
下記の通りです。

下記の文章「 」が貼りつけの際、切り取られていました。
大変、申し訳ございませんでした。

「上記お返事が遅れまして大変申し訳ございませんでした。」

(愛子) 2021/05/13(木) 20:23


佐藤様、
>普通にk=1 to 12でいいと思います。

うまく行きました。

有難うございます。

自分で出来なにので、申し訳ございませんが、
後は、日報のシート名の数値と日報の日付のずれ 及び月報の日付が不要 ということに
なります。

すみません、よろしくお願いします。

(愛子) 2021/05/13(木) 20:35


 >日報の日付が、シート名:2日 のところに令和3年5月1日になっています。ずーと来て最後シート名:
 >31日のところで、日報の日付が令和3年5月30日となり シート名:a は、日報の日付が31日と
 >なっています。色々触ったのですが思うようにいきません。教えてください。

 何のことか分からないです。こっちでは普通に出来上がっています。
 私のコードに何か変更を加えてないですか?

(半平太) 2021/05/13(木) 20:36


半平太さん
お世話になっています。

下記、コードは、半平太さんの上記コードを貼り付けしたものです。
そしてエクセルの表にも同じものを貼り付け直しました。

実行しますと、やはりシート名:2日の日報日付は、令和3年5月1日になっています。(以降のシート名
の数値と日報日付は、1日づれています。)最後のシート名:31日の日付は5月30日となります。
そしてシート名:a は、令和3年5月31日、シート名:1日の日付はブランクとなっています。

でも半平太さんは、普通に出来上がっているのですね。私のどこかが間違っているとは思いますが、
どこかわかりません。

Sub test()

     Dim k As Long
     Application.ScreenUpdating = False
     For k = 1 To Day(WorksheetFunction.EoMonth(Date, 0))
         Sheets("a").Copy after:=Worksheets(Worksheets.Count)
         ActiveSheet.Name = k & "日"
         Range("A1").Value = WorksheetFunction.EoMonth(Date, -1) + k
         Range("A1").NumberFormatLocal = "ggge年m月d日"
     Next
     Application.ScreenUpdating = True
 End Sub

(愛子) 2021/05/13(木) 21:39


>何のことか分からないです。こっちでは普通に出来上がっています。

 半平太さんは、何のことか分からないです。と書かれていますが、
 以下の事はお解りと思うのです。

 ただ認識が違いで、私が間違っていればよくないので下記に思いを記載しました。

 マクロが実行されれば、

     シート名”1日”の1が、a1セルの日報の日にちの1にして頂きたいのです。 
     シート名”2日”の2が、a1セルの日報の日にちの2にして頂きたいのです。
    以降同じ扱いにして頂きたいのです。

    そのシート名の数値と日報日付の数値がずれているということです。
(愛子) 2021/05/13(木) 22:10


原因はわかりませんがF8押してステップ実行してみれば答えは自ずと分かるのでは?
(砂糖) 2021/05/13(木) 22:23

 私のコードは、標準モジュールに貼り付けて実行してください。

(半平太) 2021/05/13(木) 23:02


半平太さん
なさけないです。
標準モジュールに貼り付けましたら上手く行きました。

砂糖さまが言われるようにf8で試し、シート名:1日 のところで日報日付が記載されていないのは、
わかったのですが、コードをどうしたらいいのかがわからなかったのです。
標準モジュールに貼り付けることが頭、働きませんでした。
お時間を取らせて申し訳なかったです。

月報は、私のほうで後で処理します。
本当に有難うございました。

砂糖さまも時間を取らせてすみませんでした。有難うございました。

(愛子) 2021/05/13(木) 23:18


既に解決済のようですが別案。
    Sub 別案()
        Dim i As Long
        Dim MyDate As Date

        MyDate = Date
        Worksheets("a").Range("A1").NumberFormatLocal = "ggge年m月d日"

        For i = DateSerial(Year(MyDate), Month(MyDate), 1) To DateSerial(Year(MyDate), Month(MyDate) + 1, 0)
            Sheets("a").Copy after:=Worksheets(Worksheets.Count)
            With Worksheets(Worksheets.Count)
                .Name = Format(i, "d日")
                .Range("A1").Value = i
            End With
        Next i

    End Sub

ポイントは以下のとおり。

 (1)アクティブシートに依存しないようにした
 (2)ループのカウンタをシリアル値そのものにした
 (3)Format関数を使うようにした

(もこな2 ) 2021/05/14(金) 10:56


もこな2様、
お世話になっています。

先程、何かコメントがあるかと思い開いてみましたら、もこな2様から
別案を頂いていました。

マクロを実行して3つのポイントは、理解できました。(もちろん、コードは、自分では書けませんが
コードを見ての意味は、自分ながらに理解できました。)

有難うございました。

(愛子) 2021/05/14(金) 20:21


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.