Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
今月に該当するシート名に赤色を
投稿日時: 19/11/29 09:29:43
投稿者: 園 日暮

シート名は、
 記入 祭日 等々を入れて21シートがあり
 
 そのうち年間の月数分だけの 「1〜12」 12シートがあります。
 その時の該当する月のシートは下記の構文で赤にしています。
 但し1〜12のシートは赤色になるがその他のシートの色付けができないのでAの構文にしています。
 
現在は 1 〜 12 のシートを都合で増やすことになり、
 11 15 21 25 31 35 41 45 51 55 ・・・ 121 125 となります。
 月度名だけのシート数は倍の24シートになります。
 
 合計のシート数は 33 シートです。
 
ご指導を仰ぎたいのは例えば
 今月の11月
 11 15 のシートが赤にしたいです。
 
 この11 15 シート名の右から一文字を取れば月度と合致する方法が分かりません。
 
 宜しくお願いします。
 
 ※月度シートはその月にプラス 1 と 5 のみで2シートだけです。
 
 
Option Explicit
Private Sub Workbook_Open()
Dim mySheet As Worksheet
For Each mySheet In Worksheets
If IsMonthSheet(mySheet.Name) = True Then
mySheet.Tab.ColorIndex = xlNone
If mySheet.Name = Format(Now(), "m") Then
mySheet.Tab.ColorIndex = 3
End If
End If
Next
 End Sub
 
A
 Private Function IsMonthSheet(ByVal sname As String) As Boolean
Dim arr As Variant
Dim i As Long
arr = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
IsMonthSheet = False
For i = 0 To UBound(arr)
If sname = arr(i) Then
IsMonthSheet = True
Exit Function
End If
Next
 End Function

回答
投稿日時: 19/11/29 10:27:33
投稿者: simple

    s = Left(mySheet.Name, Len(mySheet.Name - 1))
    If IsMonthSheet(s) = True Then
ですか。
# 今月の11月なら、111と115じゃないの?
# その説明と、プラスという言葉にだまされました。
# なにかもっと分かり易い表示がありそうなものです。
# "11"と"11A"とかねえ。

回答
投稿日時: 19/11/29 10:41:34
投稿者: 半平太

Private Sub Workbook_Open()
    Dim mySheet As Worksheet
     
    For Each mySheet In Worksheets
        If mySheet.Name = CStr(Val(mySheet.Name)) Then 'まず月度シートか確認
         
            '桁を合わせてから月名を比較する
            If Val(Left(Right("0" & mySheet.Name, 3), 2)) = Month(Date) Then
                mySheet.Tab.ColorIndex = 3
            Else
                mySheet.Tab.ColorIndex = xlNone
            End If
        End If
    Next
End Sub

投稿日時: 19/11/29 10:50:06
投稿者: 園 日暮

ご指導ありがとうございます。
 
下記の構文のように変更してテストしました。
 
その結果、
 
黄色の反転
 Private Sub Workbook_Open()
警告
コンパイル エラー
変数が必要です。
 
どうすればいいか再指導をお願いします。
 
 Private Sub Workbook_Open()
 Dim mySheet As Worksheet
 For Each mySheet In Worksheets
  
 s = Left(mySheet.Name, Len(mySheet.Name - 1))
 If IsMonthSheet(s) = True Then
   
 mySheet.Tab.ColorIndex = xlNone
 If mySheet.Name = Format(Now(), "m") Then
 mySheet.Tab.ColorIndex = 3
 End If
 End If
 Next
  End Sub

投稿日時: 19/11/29 11:01:52
投稿者: 園 日暮

半平太さん
早速のご指導をありがとうございます。
 
うまくできました。