1

特定の条件に基づいて強調表示機能を VBA でコーディングしようとしています。これは条件付き書式を使用して簡単に実行できますが、ユーザーが (特別な場合を除いて) 切り取り/貼り付け/行の削除などを行った場合に気付きました。次に、条件付き書式の範囲が変更されます。条件付き書式の範囲を実際のセルにマップするのではなく、固定したままにしたい。誰かがそれを行う方法を知っているか、条件付き書式を保護してもデータ操作を許可している場合、このコードは不要です。

私が試している 2 つの異なるコードを見つけましたが、私は VBA に慣れていないので、VBA はあまり得意ではなく、問題に遭遇します。Isblank または Isempty 機能を使用する方法がわかりません。

今から 30 日より前の日付 (経過した日付を含む) を赤で強調表示する必要があります。今から 60 日より前で、30 日より前の日付を黄色で強調表示する必要があります。データのないセルと 60 日を超えたセルは、強調表示されないままにする必要があります。

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

Private Sub Worksheet_Change(ByVal Target As Range)

Dim icolor As Integer

    If Not Intersect(Target, Range("C3:T65")) Is Nothing Then

        Select Case Target

            Case Is <= Date + 60

                icolor = 6

            Case Is <= Date + 30

                icolor = 3

            Case IsEmpty()

                icolor = 2

        End Select


        Target.Interior.ColorIndex = icolor

    End If

End Sub

その他のオプション:

Sub Highlight()
    Dim cell As Range

    For Each cell In Range("C3:T65")
        If cell.Value <= Date + 60 And cell.Value > Date + 30 Then
            cell.Offset(0, 1).Interior.ColorIndex = 6

        ElseIf cell.Value <= Date + 30 Then
            cell.Offset(0, 1).Interior.ColorIndex = 3

        ElseIf cell.Value IsEmpty() Then
            cell.Offset(0, 1).Interior.ColorIndex = 2

        End If
    Next cell

End Sub
4

2 に答える 2

0

VBNullString を使用して、セルが null であることを確認します。

ElseIf cell.Value = vbNullString Then
于 2013-03-27T22:19:06.930 に答える
0

両方のコードがほぼそこにあります。次の 2 つの組み合わせは、仕事をする必要があります。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim icolor As Integer
    Dim cell As Range

    If Intersect(Target, Range("C3:T65")) Is Nothing Then Exit Sub

    For Each cell In Target
        icolor = 0
        Select Case cell
            Case Is <= Date + 30: icolor = 3
            Case Is <= Date + 60: icolor = 6
            Case "": icolor = 2
        End Select
        If icolor <> 0 Then cell.Interior.ColorIndex = icolor
    Next cell
End Sub
于 2013-03-27T22:21:30.650 に答える