2017-10-18 5 views
0

私は、ユーザー入力の日付と現在の日付を比較し、適切な色で背景を塗りつぶすVBAコードを持っています。すべて正常に動作します。vbaはセルが空でないかどうかをチェックし、行全体を色付けする方法を秀でていますか?

今は選択された行のカラムFにおけるセルiがグレー色に着色カラムD、E、Fに必要空でないかどうかをチェックするシステムを作る必要があります。

コード:

Private Sub CommandButton1_Click() 

    Dim i As Integer 

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

     If IsEmpty(Cells(i, 3)) Then 
      Cells(i, 3).Interior.Color = xlNone 

     ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) < 0 Then 
      Cells(i, 3).Interior.Color = vbGreen 

     ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) = 0 Then 
      Cells(i, 3).Interior.Color = vbYellow 

     ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 1 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 4 Then 
      Cells(i, 3).Interior.Color = vbRed 

     ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 5 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 10 Then 
      Cells(i, 3).Interior.Color = vbCyan 

     Else 
      Cells(i, 3).Interior.ColorIndex = xlNone 

     End If 

    Next 

End Sub 

私はあなたが、関連のcriteriasでTrim(Range("F" & i).Value) <> ""場合もチェックする必要があります任意の助け

+0

使用条件付き書式 – Rosetta

+0

@Rosettaには、私は私のコード –

+0

'かの細胞(I、6)<> "" その後、細胞(I、3).entirerow.interior.color = vbRedでそれを追加する必要がありません'...これはあなたの問題を解決しますか? – Rosetta

答えて

0

に感謝します。

私も(など、Select Caseに切り替え)を介して実行するように短くし、より高速であるためにあなたの現在のコードのロジックをmodifedまし

コード

Private Sub CommandButton1_Click() 

Dim i As Long 
Dim NumofDays As Long 

For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment' 
    Cells(i, 3).Interior.Color = xlNone ' set as inital color, only change if all criterias are met 

    NumofDays = CDate(Cells(i, 3)) - Date 

    Select Case NumofDays 
     Case Is < 0 
      Cells(i, 3).Interior.Color = vbGreen 

     Case 0 
      Cells(i, 3).Interior.Color = vbYellow 

     Case 1 To 4 
      Cells(i, 3).Interior.Color = vbRed 

     Case 5 To 10 
      Cells(i, 3).Interior.Color = vbCyan 

    End Select 

    ' your 2nd criteria to color the entire row if "F" is not empty 
    If Trim(Range("F" & i).Value) <> "" Then Range("D" & i & ":F" & i).Interior.Color = ... ' selectyourcolor 
Next i 

End Sub 
+0

私は行全体を緑色または赤色にしたいと思わない...私はちょうど列** D、E、F **を灰色で塗りつぶしたいのであれば、それは私のコードにそのまま残っています...私の質問を編集します –

+0

@ Dany7elo編集したコードを見て、置き換えてください私が '' selectyourcolor'に書きたい色を書き込んでください。 –

+0

あなたのコードは動作していますが、まだセル(i、3)が空であっても1つの問題があります。 ..(i、3)が空であれば何をしたいのですか? –

0

条件付き書式が最も簡単です、ただa few clicks

  1. 変更したい背景色のセルを選択して開始します。
  2. [ホーム]タブで[条件付き書式]> [新規ルール...]をクリックして、新しい書式設定ルールを作成します。
  3. [ホーム]タブで[条件付き書式]> [新規ルール...]をクリックします。表示される「新しい書式設定ルール」ダイアログウィンドウで、「 式を使用して書式を設定してフォーマットするセルを決定する」オプションを選択し、次のように入力します。 "この式が真である値の書式設定"フィールドで: = $ C2> 4
  4. [新しい書式設定ルール]ダイアログを開き、必要な数式を入力します。 C2の代わりに にチェックする値を含むセルを入力し、必要な番号を4の代わりに入力します。 当然、less(<)または等号(=)を使用すると、 数式は= $ C2 < 4と= $ C2 = 4とそれぞれ読み取られます。
  5. また、セルのアドレスの前にドル記号$に注意してください。数式 が行全体にコピーされると、列の文字を同じに保つために使用する必要があります。実際には、それはトリックを作り、 は、与えられたセルの値に基づいて行全体にフォーマットを適用します。
  6. [書式]ボタンをクリックし、[塗りつぶし]タブに切り替えて背景色を選択します。既定の色で十分でない場合は、 「その他の色...」ボタンをクリックして好みの色を選択し、 OKを2回クリックします。
関連する問題