回答受付が終了しました

VBAを使って下記のプログラミングを組みたいのですが、さっぱりでして。。。どなたかお助け願えませんでしょうか。

Visual Basic | Excel99閲覧xmlns="http://www.w3.org/2000/svg">25

回答(4件)

0

Sub マクロ() Dim 日付入力シート, 複製するシート Set 日付入力シート = Worksheets("Sheet1") Set 複製するシート = Worksheets("Sheet2") Dim 開始日, 終了日 開始日 = CDate(日付入力シート.Range("A1")) 終了日 = CDate(日付入力シート.Range("B1")) Dim i Do Dim 日付: 日付 = DateAdd("m", i, 開始日) Dim 名前: 名前 = Format(日付, "yyyy-mm") 複製するシート.Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = 名前 i = i + 1 Loop While 日付 <= 終了日 End Sub

0

>シート名yyyy/mm 「/」は、シート名に使えない禁則文字ですね。 「_」にしてあります。 VBA以前にExcelに精通しないとダメですね。 >月毎にシートを複製 「複製用」シートを用意してください 複製は、新規ブック上で行われます。 Sub sample() Dim xDate As Date, xDateT As Date Dim sh0 As Worksheet, sh As Worksheet Application.ScreenUpdating = False With Worksheets("シートA") xDate = CDate(Format(.Range("A1").Value, "yyyy/mm") & "/01") xDateT = CDate(Format(.Range("B1").Value, "yyyy/mm") & "/01") End With Set sh0 = Worksheets("複製用") Do If sh Is Nothing Then sh0.Copy Else sh0.Copy after:=sh End If Set sh = ActiveSheet sh.Name = Format(xDate, "yyyy_mm") xDate = DateAdd("m", 1, xDate) Loop Until xDate > xDateT Application.ScreenUpdating = True End Sub

0

[シートA] (A1)2021/1/1 (B1)2023/12/31 なら2021/1~2023/12までの36枚のシートができればいいのですね。 でも、 「月毎にシートを複製」のどのシートを複製するのか書いていません。質問文に登場するシート「シートA」1枚なのでこのシートをコピーするのですかね? ちなみに、「/」はシート名に使えない文字です。使おうとするとエラーになりますよ。

0

まずは機能というかやりたいことを細分化しましょう。 仕様を満足するためにはどんな機能(この場合は関数と言ってもいいですね)が必要であるか整理しましょう 私が軽く見た限りでは ①SheetAの特定のセルに入力されている値を取得する方法 ➁Sheetを複製する方法 ③Sheet名を変更する方法 後は細かい制限等。 例えば、A1のセルに日付ではないのが入力されていた場合。 ⇒そもそも入力させないようにする。 ⇒Msgで「日付が正しくありません」と表示し、セルを空にする等 ⇒VBA実行時にはじく。 ⇒実行時に「日付が正しくありません」と表示し、プログラムを中断等

セルの値は Dim d1 As Date d1 = Range("A1").Value これで取得できますね。ただしA1がDate型でない場合 多分怒られます。 Sheetのコピーとリネームですが、こんな関数で行けそうです Function SheetCopy1(d1 as date )   Dim str as String str = Month(d1) Worksheets("SheetA").Copy Before:=Worksheets("SheetA") ActiveSheet.Name = str End Sub 試していないうえにVBA、しばらくやっていないのでショボミス があるかもしれませんが。