Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


52 / 13113 ツリー ←次へ | 前へ→

【79569】ifのネストを浅くしたい なー 18/1/12(金) 22:59 質問[未読]
【79570】Re:ifのネストを浅くしたい γ 18/1/12(金) 23:21 回答[未読]
【79571】Re:ifのネストを浅くしたい なー 18/1/13(土) 0:08 お礼[未読]

【79569】ifのネストを浅くしたい
質問  なー  - 18/1/12(金) 22:59 -

引用なし
パスワード
   こんにちは
現在、条件によってセルの背景色を変えるマクロを作成しています。
その条件というのが、10:00〜17:00までの1時間ごとに、その時間以降、
セルの値が特定のものだったら色を変える、というものです。

A1セルの値は不定の時間によって○→△→□と変化していき、
B1、C1セルの値は不変です。

そこで下記のようなマクロを作成しました。

Sub ChangeColor()

Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Set rng1 = Range("A1")
Set rng2 = Range("B1")
Set rng3 = Range("C1")

  If Time > CDate("10:00") Then
    If rng1 Like "*○○*" And rng2 Like ("*い*") Then
      rng1.Interior.ColorIndex = 3
    End If
    
    If Time > CDate("11:00") Then
      If rng1 Like "*△△*" And rng3 Like ("*う*") Then
        rng1.Interior.ColorIndex = 4
      End If
      
      If Time > CDate("12:00") Then
        If rng1 Like "*□□*" And rng3 Like ("*う*") Then
          rng1.Interior.ColorIndex = 5
        End If
      
        If Time > CDate("13:00") Then
          
          If Time > CDate("14:00") Then
          
            If Time > CDate("15:00") Then
            
              If Time > CDate("16:00") Then
              
                If Time > CDate("17:00") Then
                
                
                End If
              End If
            End If
          End If
        End If
      End If
    End If
  End If

End Sub

とりあえず狙ったようには動くのですが、他サイトなどを見ると
あまりネストを深くするべきではない、などの記述がありますし
自分で見ても混乱する時があります。
また、時間と時間の間の条件は、今後追加や削除がありえます。
Select〜Caseを使えばいいらしい、というのは目にしたのですが
どう記述すればよいかがいまいち分かりません。
このような記述をより浅く、もしくは別の方法でより分かりやすく
記述するにはどうすればよいでしょうか。
よろしくお願いいたします。

【79570】Re:ifのネストを浅くしたい
回答  γ  - 18/1/12(金) 23:21 -

引用なし
パスワード
   色々な書き方があると思いますが、一例です。(テスト未済。)

Sub ChangeColor()
  Dim rng1 As Range
  Dim rng2 As Range
  Dim rng3 As Range
  Set rng1 = Range("A1")
  Set rng2 = Range("B1")
  Set rng3 = Range("C1")

  Select Case Time
    Case Is <= CDate("10:00")
    Case Is <= CDate("11:00")
      If rng1.Value Like "*○○*" And rng2.Value Like "*い*" Then
        rng1.Interior.ColorIndex = 3
      End If
    Case Is <= CDate("12:00")
      If rng1.Value Like "*△△*" And rng3.Value Like "*う*" Then
        rng1.Interior.ColorIndex = 4
      End If
    Case Is <= CDate("13:00")
      If rng1.Value Like "*□□*" And rng3.Value Like "*う*" Then
        rng1.Interior.ColorIndex = 5
      End If
    '以下同様につき省略
  End Select
End Sub

【79571】Re:ifのネストを浅くしたい
お礼  なー  - 18/1/13(土) 0:08 -

引用なし
パスワード
   なるほど!
不等号の向きを逆にして条件式の位置を変えてあげれば
一つ目のCaseがTrueの際、後がスルーされるみたいなことを回避できますね!
なんというかすごくしっくり来ました。
休み明けに実データで試してみようと思います。
ご回答ありがとうございました。

52 / 13113 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free