こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

(参考)0209は2月9日の意味です。

投稿日時 - 2018-02-09 10:48:03

QNo.9427189

困ってます

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

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桁とかも同様)

投稿日時 - 2018-02-09 11:40:18

お礼

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

投稿日時 - 2018-02-17 07:24:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

投稿日時 - 2018-02-12 18:29:31

お礼

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

投稿日時 - 2018-02-17 07:25:24

ANo.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

エラー処理は一切考えていません。
どういう運用をするか?でエラー処理も変わるでしょうから。

投稿日時 - 2018-02-09 17:26:10

お礼

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

投稿日時 - 2018-02-17 07:24:54