• ベストアンサー

マクロでシート名を日付に変更したい

アクティブなシートの名前が”0209”だとすると、マクロでその左のシート名を”0210”に変えたい。(1日後の日付にしたい) (参考)0209は2月9日の意味です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Private Sub CommandButton1_Click() Dim dt1 As String Dim dt2 As String On Error GoTo Error dt1 = ActiveSheet.Name dt2 = Format(DateValue(Format(Date, "yyyy") & "/" & Left(dt1, 2) & "/" & Right(dt1, 2)) + 1, "mmdd") Sheets(ActiveSheet.Index + 1).Name = dt2 Error: End Sub アクティブなシートが「有効な日付ではない(13月とか、33日とか)場合」と「アクティブなシートが最後のシート(次のシートが存在しない)の場合」には、エラーを検知して「何もしない」ようになっています。 また「有効な日付かどうか?」は「今年」が基準になっています。つまり「0229」は「今年は無効」なので、エラーになります。うるう年が存在する年に実行すれば「0229」は有効と判断されます。 あと「日付の月と日を取り出す時」に「左から2桁」と「右から2桁」で取り出しているので、アクティブシートのシート名が「029」のように「4桁じゃない時」に「02」「29」と誤判断します(2桁とか5桁とか6桁とかも同様)

gennya
質問者

お礼

回答ありがとうございます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

Activeなシートのシート名タブ的に右隣のシートは、.Nextで ActiveSheet.Next.Name = "xxx1" のようにとらえられる。 あとは名付けたのちのシート名が、既存のシート名とダブらないように上記XXX1の部分を ”0209”から、”0210”に変えた文字列を作って設定すれしまい。 +1した日付(次の日、1日後)を作るのは 文字列の"0209”の前に年数字を加え、 例2018/02/09 これを関数で日付シリアル値に変換し、その日付シリアル値に +1し、日付の文字列化して、月日部分(4桁?)を取り出す、という面倒なことを、避けずに行えばしまい。 頭で考えて日付に+1してはならない。月末、年末、閏月末などで失敗しないように。エクセルの暦の精緻な仕組みを使うこと。 休日は避けるというなら、さらに一苦労してください。

gennya
質問者

お礼

回答ありがとうございます。

回答No.2

> その左のシート とのことなので、1行で。 Sub Macro()   Sheets(ActiveSheet.Index - 1).Name = Format(DateSerial(Year(Now()), Left(ActiveSheet.Name, 2), Right(ActiveSheet.Name, 2) + 1), "MMDD") End Sub エラー処理は一切考えていません。 どういう運用をするか?でエラー処理も変わるでしょうから。

gennya
質問者

お礼

回答ありがとうございます。

関連するQ&A

専門家に質問してみよう