2017-10-09 7 views
0

ユーザーが日付を入力できるようにするVBAコードがあり、入力した日付を現在の値と比較すると、適切な色でセルを埋めるために、 ケースステートメントを選択してください。ケースステートメントを使用して現在のデータ+ 10日間を比較するVBAコード

セルを赤で塗りつぶす必要があります。ユーザーは今日の日付+10日を入力します。

どのようにすればよいですか?

コード

Private Sub CommandButton1_Click() 

Dim i As Integer 
Dim objDate As Date 


MsgBox (objDate) 

For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment' 

    objDate = Date 

    Select Case VBA.CDate(Cells(i, 3)) 

    Case IsEmpty(i) 
     Cells(i, 3).Interior.ColorIndex = 0 

    Case Is < VBA.Date() 
     Cells(i, 3).Interior.Color = vbGreen 

    Case Is = VBA.Date() 
     Cells(i, 3).Interior.Color = vbYellow 

    Case Is > VBA.Date() 
     Cells(i, 3).Interior.Color = vbRed 


    End Select 
Next 

End Sub 
+0

なぜ宣言の後に 'MsgBox'の権利がありますかation?それには値は含まれません。日付と数字は0で初期化されます。したがって、00:00:00と表示されます。そして 'objDate'の目的は何ですか?あなたはコード内のどこでも使用しません。オーバーヘッドに追加するのは、ループ内で同じ値を割り当てるためです。 – Mahesh

答えて

0

はここでそれを達成するための別の方法です。 2つの日付の違いをテスト式として取り、それぞれの場合(つまり、0より小さいか等しいか、またはその差が10より大きいかどうか)を確認します。あなたがそれを意図したとおりi(カウンタ)が空であるかどうか、あなたがチェックしているので

If IsEmpty(Cells(i, 3)) Then Exit Sub 
Select Case (VBA.CDate(Cells(i, 3)) - VBA.Date()) 
    Case Is < 0 
     Cells(i, 3).Interior.Color = vbGreen 
    Case 0 
     Cells(i, 3).Interior.Color = vbYellow 
    Case Is > 10 
     Cells(i, 3).Interior.Color = vbRed 
    Case Else 
     'Colour to be applied if the difference is between 1 and 10 (both inclusive) 
End Select 

また、IsEmptyのテストでは、動作しません。常にFalseが返されます。セルには既にColorIndexがあります。したがって、空でないセルが空になったかどうかをコードで確認しなければ、Cells(i, 3).Interior.ColorIndex = 0の部分は不要です。

更新:楽しい実験として

、私は結果が見えたかを確認するためにそれを試してみた、とここにスクリーンショットです:

Macro in action

PS: OPのdidnので、その違いが1と10の間の色について言及していない場合、それらのセルを黒色に着色しました.-P