0

特定の列に空白のテキストがある場合に行を強調表示するマクロがあります。このマクロは、ユーザーが注意を向ける必要がある領域を強調表示するために使用されます。同じマクロ ボタンをクリックして、変更が行われた後にそれらの行の強調表示を解除できるようにしたいと考えています。

どうすればいいですか?

これが現在のマクロです。

Sub Macro13() 
       With Application
        CalcMode = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With

    With ActiveSheet
       .Select
        ViewMode = ActiveWindow.View
        ActiveWindow.View = xlNormalView
        .DisplayPageBreaks = False

        Firstrow = 2
        LastRow = .Cells(.Rows.Count, "M").End(xlUp).Row

        For Lrow = LastRow To Firstrow Step -1

             With .Cells(Lrow, "M")
                 If .Value = "" Then
                    .EntireRow.Interior.ColorIndex = 3
                End If
             End With


        Next Lrow
    End With

    ActiveWindow.View = ViewMode
    With Application
        .ScreenUpdating = True
        .Calculation = CalcMode
    End With

End Sub

私の考えは、マクロの開始時に、行が赤く強調表示されているかどうかを確認することでした。その場合は、すべての列を反復する新しいループを実行し、セルの強調表示を削除してから、そのループが完了したら、マクロから抜け出します。ただし、これは醜く、エラーだらけです。

Sub Macro13() 'Checks for Incorrect Countries

   With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
End With

With ActiveSheet
   .Select
    ViewMode = ActiveWindow.View
    ActiveWindow.View = xlNormalView
    .DisplayPageBreaks = False

    Firstrow = 2
    LastRow = .Cells(.Rows.Count, "M").End(xlUp).Row

    FirstrowA = 2
    LastRowA = .Cells(.Rows.Count, "M").End(xlUp).Row

    For Lrow = LastRow To Firstrow Step -1

         With .Cells(Lrow, "M")
             If .EntireRow.Interior.ColorIndex = 3 Then
                   For LrowA = LastRowA To FirstrowA Step -1
                            .EntireRow.Interior.ColorIndex = xlColorIndexNone
                             Next LrowA
                    End
                Exit Sub
             End If


             If .Value = "" Then
                .EntireRow.Interior.ColorIndex = 3
            End If
         End With
    Next Lrow
End With

ActiveWindow.View = ViewMode
With Application
    .ScreenUpdating = True
    .Calculation = CalcMode
End With

End Sub
4

2 に答える 2

1

以前にも同様の問題があり、条件付き書式がうまく機能しませんでした。私はこれに似たものを使用しました:

Sub CheckAndHighlight(area As Range, Optional ByVal searchValue As String = "")

Application.ScreenUpdating = False

Dim r As Range
For Each r In area
    r.EntireRow.Interior.ColorIndex = 0

    If r.Value = searchValue Then
    r.EntireRow.Interior.ColorIndex = 3
    End If
Next

Application.ScreenUpdating = True

End Sub
于 2013-06-10T19:27:11.920 に答える
1

これでうまくいくはずです。空白の強調表示を開始する前に、書式設定を探すループを追加しました。if が何か赤いものを見つけた場合、赤い書式設定のシート全体をクリアし、フラグを立てます (Tracker = True)。フラグが立てられると、マクロは空白セルの行を赤としてフォーマットしません。私はそれをテストしましたが、うまくいきました。

Sub Macro13()
   With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
End With

With ActiveSheet
   .Select
    ViewMode = ActiveWindow.View
    ActiveWindow.View = xlNormalView
    .DisplayPageBreaks = False

    Firstrow = 2
    LastRow = .Cells(.Rows.Count, "M").End(xlUp).Row

    Dim Tracker As Boolean
    Tracker = False
    For Lrow = LastRow To Firstrow Step -1
        If .Cells(Lrow, "M").EntireRow.Interior.ColorIndex = 3 Then
            .Cells.Interior.ColorIndex = 0
            Tracker = True
            Exit For
        End If
    Next Lrow

    If Tracker = False Then
        For Lrow = LastRow To Firstrow Step -1

            With .Cells(Lrow, "M")
                If .Value = "" Then
                    .EntireRow.Interior.ColorIndex = 3
                End If
            End With

        Next Lrow
    End If
End With

ActiveWindow.View = ViewMode
With Application
    .ScreenUpdating = True
    .Calculation = CalcMode
End With
End Sub
于 2013-06-11T14:34:59.743 に答える