Risultati da 1 a 5 di 5

Discussione: Individuare Min e Max in un range di celle



  1. #1
    L'avatar di Lcbsm
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Italia
    Messaggi
    46
    Versione Office
    Office 2013
    Likes ricevuti
    0
    Likes dati
    21

    Individuare Min e Max in un range di celle

    Buondì, nell'esempio allegato sto cercando di individuare, all'interno di un range, la cella che contiene il valore minimo e la cella che contiene il valore massimo per ogni riga.

    Individuate queste celle, voglio colorarle.


    il codice che trovate nel file è il seguente:

    Codice: 
    Option Explicit
    
    Sub prova()
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    Dim wb As Workbook
    Dim fo As Worksheet
    Dim Mini As Range
    Dim Maxi As Range
    Dim i As Integer
    
    Set wb = ThisWorkbook
    Set fo = wb.Sheets("Foglio1")
    
    'Individuo il valore minimo per ogni riga e lo coloro con un colore, il massimo lo coloro con un altro colore; se Min=Max, non coloro
    For i = 3 To 8
        Mini = Application.WorksheetFunction.Min(fo.Range(fo.Cells(i, 2), fo.Cells(i, 5))).Address
        Maxi = Application.WorksheetFunction.Max(fo.Range(fo.Cells(i, 2), fo.Cells(i, 5))).Address
        If Mini <> Maxi Then
            Mini.Interior.Color = 192
            Maxi.Interior.Color = 100
        End If
    Next i
    
    Set wb = Nothing
    Set fo = Nothing
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    End Sub
    Il tutto però si blocca: mi compare un messaggio di errore "Errore compilazione, qualificatore non valido" ed evidenzia in blu il testo "Min". Non appena clicco "ok", viene evidenziato in giallo "Sub prova()".

    Modificando un po' il codice, ho capito che il problema è legato a quell'".Address" che accodo a Mini e Maxi: se infatti tolgo .Address, il codice arriva fino alla fine, ma ovviamente non ottengo il risultato desiderato.

    Cosa posso fare per sistemare il tutto?

    Grazie! :28:
    File Allegati File Allegati

  2. #2

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4016
    Versione Office
    2013
    Likes ricevuti
    1225
    Likes dati
    923
    Ciao,

    le funzioni "Min" e "Max" restituiscono un numero non un range...

    Quindi dovresti prima trovarti quali sono questi numeri e dopo fare un confronto per colorare la giusta cella.
    Uno dei tanti metodi è "Find":

    Codice: 
    Option Explicit
    
    
    Sub prova()
    
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Dim wb As Workbook
    Dim fo As Worksheet
    Dim Mini As Double
    Dim Maxi As Double
    Dim i As Integer
    Dim x As Range
    
    
    Set wb = ThisWorkbook
    Set fo = wb.Sheets("Foglio1")
    
    
    'Individuo il valore minimo per ogni riga e lo coloro con un colore, il massimo lo coloro con un altro colore; se Min=Max, non coloro
    For i = 3 To 8
        Mini = Application.WorksheetFunction.Min(fo.Range(fo.Cells(i, 2), fo.Cells(i, 5)))
        Maxi = Application.WorksheetFunction.Max(fo.Range(fo.Cells(i, 2), fo.Cells(i, 5)))
        If Mini <> Maxi Then
            With fo.Range(Cells(i, 2), Cells(i, 5))
               Set x = .Find(Mini, LookIn:=xlValues)
                If Not x Is Nothing Then
                    x.Interior.Color = 192
                End If
                Set x = .Find(Maxi, LookIn:=xlValues)
                If Not x Is Nothing Then
                    x.Interior.Color = 100
                End If
            End With
        End If
        'Mini.Interior.Color = 192
        'Maxi.Interior.Color = 100
    Next i
    
    
    Set wb = Nothing
    Set fo = Nothing
    Set x = Nothing
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    
    End Sub
    File Allegati File Allegati

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  3. I seguenti utenti hanno dato un "Like"


  4. #3

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    365
    Likes dati
    0
    Ciao,

    come ti ha fatto giustamente notare Tore, non puoi assegnare un valore long ad una variabile Range.

    Questa è la correzione, del tuo codice, meno invasiva possibile:
    Codice: 
    Sub prova()
    
      Application.DisplayAlerts = False
      Application.ScreenUpdating = False
      
      Dim wb As Workbook
      Dim fo As Worksheet
      Dim Mini As Range
      Dim Maxi As Range
      Dim i As Integer
      
      Set wb = ThisWorkbook
      Set fo = wb.Sheets("Foglio1")
      
      'Individuo il valore minimo per ogni riga e lo coloro con un colore, il massimo lo coloro con un altro colore; se Min=Max, non coloro
      For i = 3 To 8
        With fo.Range(fo.Cells(i, 1), fo.Cells(i, 5))
          Set Mini = .Find(what:=Application.WorksheetFunction.Min(.Cells)).Cells
          Set Maxi = .Find(what:=Application.WorksheetFunction.Max(.Cells)).Cells
          If Mini.Value <> Maxi.Value Then
              Mini.Interior.ColorIndex = 4
              Maxi.Interior.ColorIndex = 6
          End If
        End With
      Next i
      
      Set wb = Nothing
      Set fo = Nothing
      Set Mini = Nothing
      Set Maxi = Nothing
    
      
      Application.DisplayAlerts = True
      Application.ScreenUpdating = True
      
    End Sub

  5. I seguenti 2 utenti hanno dato un "Like" a scossa per questo post:


  6. #4
    L'avatar di Lcbsm
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Italia
    Messaggi
    46
    Versione Office
    Office 2013
    Likes ricevuti
    0
    Likes dati
    21
    Grazie ad entrambi!

    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,

    come ti ha fatto giustamente notare Tore, non puoi assegnare un valore long ad una variabile Range.
    In realtà, io volevo assegnare un range ad una variabile range, solo che non sapevo come fare in questo frangente:167:

  7. #5
    L'avatar di Lcbsm
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Italia
    Messaggi
    46
    Versione Office
    Office 2013
    Likes ricevuti
    0
    Likes dati
    21
    Ho notato che le vostre soluzioni evidenziano solo uno dei minimi (massimi) qualora ve ne sia più di uno.

    Per ovviare a questo problema ho scritto questa qui:

    Codice: 
    Option Explicit
    
    Sub prova()
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    Dim wb As Workbook
    Dim fo As Worksheet
    Dim Mini As Double
    Dim Maxi As Double
    Dim i As Integer
    Dim j As Integer
    
    
    Set wb = ThisWorkbook
    Set fo = wb.Sheets("Foglio1")
    
    'Individuo il valore minimo per ogni riga e lo coloro in verde, il massimo lo coloro in rosso; se Min=Max, non coloro
    For i = 3 To 8
        Mini = Application.WorksheetFunction.Min(fo.Range(fo.Cells(i, 2), fo.Cells(i, 5)))
        Maxi = Application.WorksheetFunction.Max(fo.Range(fo.Cells(i, 2), fo.Cells(i, 5)))
        For j = 2 To 5
            If fo.Cells(i, j) = Mini Then
                fo.Cells(i, j).Interior.ColorIndex = 4
            ElseIf fo.Cells(i, j) = Maxi Then
                fo.Cells(i, j).Interior.ColorIndex = 6
            End If
        Next j
    Next i
    
    Set wb = Nothing
    Set fo = Nothing
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    End Sub
    Questa colora tutti i minimi e tutti i massimi, per ogni riga.

    Pensate si possa scrivere in un modo diverso (più efficiente? più "formalmente corretto"?)

    Tnx!

Discussioni Simili

  1. Colorare Sfondo Range di Celle con VBA
    Di Tullio17 nel forum Domande su Excel VBA e MACRO
    Risposte: 23
    Ultimo Messaggio: 12/12/16, 17:47
  2. Risposte: 2
    Ultimo Messaggio: 04/10/16, 19:49
  3. individuare le celle che sembrano vuote ma non lo sono
    Di patel nel forum Domande su Excel VBA e MACRO
    Risposte: 9
    Ultimo Messaggio: 02/08/16, 11:26
  4. Salva pdf di un range di celle - office Mac
    Di Bolz1 nel forum Domande su Excel VBA e MACRO
    Risposte: 6
    Ultimo Messaggio: 20/01/16, 08:42
  5. Salvataggio di un range di celle
    Di John nel forum Domande su Excel VBA e MACRO
    Risposte: 7
    Ultimo Messaggio: 22/12/15, 14:51

Tag per Questa Discussione

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •