1
votes

VBA, trouver la valeur MIN, mettre en surbrillance la ligne en fonction de cette valeur

J'ai une plage de valeurs, je veux trouver le MIN, puis mettre en surbrillance la ligne de cette valeur Min.

Sub worstcase()


Set Rng = .Range("H44:H54")
worstcase = Application.WorksheetFunction.Min(Rng)
Debug.Print worstcase

Comment puis-je mettre en évidence des lignes en fonction du pire des cas? J'ai ma plage statique et je trouve la valeur minimale, mais maintenant je dois mettre en évidence la ligne de la variable la plus défavorable.


0 commentaires

3 Réponses :


1
votes

Vous pouvez le faire ainsi.

Cela ne fonctionnera pas si vous avez un minimum répété.

Vous pouvez également utiliser le formatage conditionnel et éviter VBA.

Sub worstcase()

Dim Rng As Range, worstcase, i As Long

Set Rng = Range("H44:H54")

With Rng
    worstcase = Application.WorksheetFunction.Min(.Cells)
    i = Application.Match(worstcase, .Cells, 0)
    .Cells(i).EntireRow.Interior.Color = vbRed
End With

End Sub


2 commentaires

Merci! et si je ne veux pas faire une ligne entière, disons que je veux mettre en évidence une plage basée sur le min, disons H Min à Q Min?


Mettez à jour la plage. .Range (.Cells (i, 8), .Cells (i, 17)). Interior.Color = vbRed



1
votes

Mettre en évidence la ligne avec les critères trouvés

Le code met en évidence chaque ligne où le minimum a été trouvé. Utilisez Exit For pour mettre en surbrillance uniquement le premier trouvé.

Le code

Sub worstcase()

    Const cFirst As Variant = "H"
    Const cLast As Variant = "Q"

    Dim worstcase As Double ' Long for whole numbers.
    Dim rng As Range
    Dim cell As Range

    With Worksheets("Sheet1")
        Set rng = .Range("H44:H54")
        worstcase = Application.WorksheetFunction.Min(rng)
        Debug.Print worstcase

        For Each cell In rng
            If cell.Value = worstcase Then
                .Range(.Cells(cell.Row, cFirst), .Cells(cell.Row, cLast)) _
                    .Interior.ColorIndex = 3 ' Hightlight cells.
                'Exit For ' To highlight only the first found cells.
            End If
        Next

    End With

End Sub

EDIT:

Sub worstcase()

    Dim worstcase As Double ' Long for whole numbers.
    Dim rng As Range
    Dim cell As Range

    With Worksheets("Sheet1")
        Set rng = .Range("H44:H54")
        worstcase = Application.WorksheetFunction.Min(rng)
        Debug.Print worstcase

        For Each cell In rng
            If cell.Value = worstcase Then
                cell.EntireRow.Interior.ColorIndex = 3 ' Hightlight whole row.
                'cell.Interior.ColorIndex = 5 ' Hightlight only cell.
                'Exit For ' To highlight only the first found row.
            End If
        Next

    End With

End Sub

h1>


1 commentaires

Avez-vous une option de plage spécifiée en surbrillance? ie En utilisant toujours uniquement la valeur min, au lieu de entirerow, mettez en surbrillance H à Q?



1
votes

Créez une règle de mise en forme conditionnelle basée sur la formule suivante.

With worksheets("sheet1").range("44:54")
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="=$H44=min($H$44:$H$54)"
    .FormatConditions(.FormatConditions.Count).Interior.Color = vbred
End With

Ce VBA créera un CFR pour les lignes 44:54.

=$H44=min($H$44:$H$54)


0 commentaires