1

Excel VBAで有効期限を強調表示しようとしています。列 B で翌月に有効期限が切れる日付を強調表示し、列 c で 4 ~ 6 か月以内に有効期限が切れる日付を強調表示する必要があります。現在、列を削除して一度に1列ずつコードを実行すると、コードが機能します。

Name            Green Will Expire within 1 Month    
Name 1          01/01/2013    
Name 2          17/07/2013    
Name 3          03/04/2013    
Name 4          24/03/2013    
Name 5          16/07/2013    
Name 6          26/01/2013    
Name 7          28/06/2013    
Name 8          01/07/2013    
Name 9          09/01/2013    
Name 10         31/07/2013

名前 (列 A)、グリーンは 1 か月以内に有効期限が切れます (列 B)。

これらの 2 つの列のみ (列 C を削除した) でコードを実行すると、コードは正常に動作します。3 番目の列を含めると、Orange Expires in 4 - 6 Months (列 C):

   Name     Green Will Expire within 1 Month    Orange Expires in 4 - 6 Months
Name 1          01/01/2013                          01/01/2013
Name 2          17/07/2013                          01/12/2013
Name 3          03/04/2013                          03/04/2013
Name 4          24/03/2013                          20/11/2013
Name 5          16/07/2013                          16/07/2013
Name 6          26/01/2013                          26/01/2013
Name 7          28/06/2013                          28/06/2013
Name 8          01/07/2013                          01/07/2013
Name 9          09/01/2013                          09/01/2013
Name 10         31/07/2013                          31/07/2013

2 番目の for ループのみが機能します。列を削除せずにループを実行するには、これらの両方が必要です。

VBA コード:

Private Sub CommandButton1_Click()

Dim Cell As Range

    For Each Cell In Range("B2:B1000").Cells
        If Cell.Value <= Date + 30 And Not (Cell.Value < Date) And IsEmpty(Cell.Offset(0, 1).Value) Then
        Cell.Interior.ColorIndex = 35
        End If
    Next Cell

    For Each Cell In Range("C2:C1000").Cells
         If Cell.Value <= Date + 180 And Not (Cell.Value <= Date + 120) And IsEmpty(Cell.Offset(0, 1).Value) Then
         Cell.Interior.ColorIndex = 45
         End If
    Next Cell

End Sub

どんな助けでも大歓迎です。

ありがとうございました

4

1 に答える 1

2

条件ステートメントの一部は、列 C が空でない場合に常に評価されます。False

And IsEmpty(Cell.Offset(0, 1).Value)

関連して、同じフラグメントが 2 番目のループにあるため、そこからも削除することをお勧めします。しかし、その部分が必要なロジックになるかどうかはわかりません。いずれにせよ、同じことが当てはまります。列 D が空でない場合、これは常に false と評価されるため、の本体はIf...Then省略されます。

于 2013-06-17T14:12:02.630 に答える