MIN MAX



  • MIN MAX
    di Claudio (utente non iscritto) data: 22/11/2013 22:37:54

    Buonasera. Ho messo le formule MIN e MAX nel file che allego però non capisco perchè non vanno. Qualcuno lo sa? Grazie



  • di Mister_x (utente non iscritto) data: 23/11/2013 00:51:56

    ciao

    nei tuoi dati che importi da veb devi fare due modifiche sotanziali e utilizzare una matriciale
    per primo devi convertire tutti i punti in virgola quindi seleziona da A7 fino a Z28
    vai sul canocchiale in fondo a destra e prima fai trova e metti il ( . ) punto
    dopo sostituisci e metti la ( , ) virgola confermi tutti
    selezioni le celle AB7 e AC7 e destro del mause le metti a generale essendo formattate a testo
    in AB7 scrivi =MIN(A7:Z7+0) e confermi con ctrl+maiusc+invio
    in AC7 scrivi =MAX(A7:Z7+0) e confermi con ctrl+maiusc+invio
    questo serve perche' molte celle sono a testo

    ti posto il tuo file per conferma dati

    ciao Mister_x





  • di Claudio (utente non iscritto) data: 23/11/2013 09:46:25

    Grazie della spiegazione. Non ho capito solo una cosa:

    cit: questo serve perche' molte celle sono a testo

    ma il formato delle celle non è tutte a generale? Scusami ma sono un pò ignorante.

    cit: selezioni le celle AB7 e AC7 e destro del mouse le metti a generale essendo formattate a testo



  • di Mister_x (utente non iscritto) data: 23/11/2013 10:01:58

    ciao claudio

    succede questa cosa dalla versinone excel 2007 in poi, con la 2003 quando si importa da web dei dati non vengono alterate le celle non prese in considerazione dal copia incolla, ma ,come detto, da 2007 e avendo ha disposizione anche la 10 ho notato questo fatto e specialmente se dopo devo inserire una matriciale, quindi prima di fare qualsiasi operazione vado ha controllare le celle in questione e le trovo sempre a formato testo

    MISTERO
    le riporto in generale e posso inserire la mia funzione matriciale o normale

    ciao Mister_x






  • di Claudio (utente non iscritto) data: 23/11/2013 10:51:26

    Ho capito, qualche bug di office! Allego di nuovo il file dove ho messo una formula in formattazione condizionale che funziona a metà, come va corretta?



  • di Miste_x (utente non iscritto) data: 23/11/2013 12:11:07

    ciao

    allegato copia del tuo file con modifica alla formattazione condizionale

    vedi come ho elaborato la cosa sfruttando la colonna di min e max
    lavoro di 2 minuti

    ps attenzione che la formula e' stata applicata a due Range() differenti A7:Z16 A18:Z28 e per vedere come ho impostato tali formule devi visionare la cella A7 e A18

    ciao Mister_x



  • di Claudio (utente non iscritto) data: 23/11/2013 12:18:18

    Ok. Hai usato le 2 colonne d'appoggio, ma senza quelle la formula da usare qual'è? La mia perchè non andava? Vorrei imparare qualcosina......



  • di Mister_x (utente non iscritto) data: 23/11/2013 17:51:07

    ciao

    se stai usando la versine 2010 e ai attivato in
    opzioni
    formule
    in basso a sinistra il regole controllo errori la 4 spunta
    Numeri formattati come testo ........
    vedrai in alcune celle del tuo database in alto a sinista che ti segna la che quei numeri in relta sono testi quindi non calcolabili, ecco perche' la variazione da testo a numerico con il +0 o *1 che e' uguale
    quindi im questo caso convertiamo i valori da testo in numerico per il calcolo , e quelli in numerico facendo +0 o *1 rimangono come valori invariati ma utilizzabili

    si potrebbe creare una sub() che converta ma il problema e' conoscere il VBA per poterla modificare all'occorrenza in base ai vari bisogni,
    quindi il male dei mali e' ricorrere a queste variazioni che sono permesse in excel

    ciao MIster_x





  • di Mister_x (utente non iscritto) data: 23/11/2013 19:16:07

    riciao

    per passare il tempo ti ho creato la macro per farti vedere il procedimento, quasta in base al tuo primo foglio postato eseque tutto il lavoro che tu dovresi fare manualmente
    spiegazione ristretta
    modifica le celle in generale
    cambia il puntino con la virgola ad ogni cella
    le porta in valore numerico

    in questo modo se guardi il file modificato ultimo Min Max con macro le colonne di appoggio le puoi cancellare perche nella formattazione condizionale ho utilizzato le tue formule
    PS attento ai riferimenti relativi o assoluti $

    ciao Mister_x
     
    Option Explicit
    Sub Da_testo_a_numero()
    Dim range1 As Range, range2 As Range
    Dim cella As Variant
    Dim s As Shape  ''nome dello shapes
    Set range1 = Range("A7:Z16")
    Set range2 = Range("A18:Z28")
    
    Application.EnableEvents = False
     DoEvents
    Set s = ActiveSheet.Shapes.AddTextEffect(msoTextEffect28, "Attendere Prego", "Impact", _
                                               80#, msoFalse, msoFalse, 100#, 100#)
    ''' mettiamo le celle a Generale
     range1.Select
     Selection.NumberFormat = "General"
     range2.Select
     Selection.NumberFormat = "General"
     Range("A1").Activate
    ''' qui li portiamo tutti a valore
    For Each cella In range1
       cella.Replace What:=".", Replacement:=","
       Cells(cella.Row, cella.Column) = --(cella)
    Next
    For Each cella In range2
      cella.Replace What:=".", Replacement:=","
      Cells(cella.Row, cella.Column) = --(cella)
    Next
     s.Delete
    Set s = Nothing
    Set range1 = Nothing
    Set range2 = Nothing
    Application.EnableEvents = True
    MsgBox " Elaborazione Terminata "
    End Sub
    
    
    
    






  • di Vecchio Frac data: 23/11/2013 19:24:01

    Non serve preselezionare range1 e range2 per applicarci un formato.
    E puoi unire i due range in uno solo per concentrare le operazioni (Union).

    Mi piace il semplice trucco della Shape per interagire con l'utente e simulare un'attesa (ma DoEvents è necessario? perchè rallenta un po', comunque non ho testato).

    My 2 cents :)





  • di Claudio (utente non iscritto) data: 23/11/2013 19:40:22

    Troppa grazia Sant'Antonio! Ti ringrazio della macro però concordo con Vecchio Frac con questa differenza: perchè fare quei 2 range? Secondo me è meglio applicare a tutto il foglio. Un altra cosa, al primo file che ho allegato questa formula nella formattazione condizionale come la devo modificare? =A7=MIN($A$7:$Z$7) Devo aggiungere un +0?



  • di Mister_x (utente non iscritto) data: 23/11/2013 21:53:30

    ciao V.F.

    forse intendevi in questo modo , vedi sub() modificata con la union di 2 range() differenti
    avevo preferito la prima soluzione per far capire il meccanismo della sub() perche' in A17 abbiamo una cella unita da A17 a Z17, si continua a dire di non farle ma inutilmente vengono continuamente proposte, ecco il perche' dei due range()
    il DoEvents rallenta si forse um millesimo di secondo quindi lasciamolo li pronto a fare il suo lavoro
    ho inserito lo Shape per un mio divertimento di attesa allevento, questi l'avevo proposto in un post ma non ho avuto ancora la conferma di OK al suo utilizzo,

    Per claudio
    la formattazione condizionale non accetta le matriciali quindi bisogna utilizzare, per questo due colonne di appoggio come hai visto nei file, mentre se utilizzi la sub di conversione puoi adottare la tua funzione nella formattazione

    ciao Mister_x
     
    Option Explicit
    Sub Da_testo_a_numero()
    Dim range1_2 As Range
    Dim cella As Variant
    Dim s As Shape  ''nome dello shapes
    Set range1_2 = Range("A7:Z16,A18:Z28")
    Application.EnableEvents = False
     DoEvents
    Set s = ActiveSheet.Shapes.AddTextEffect(msoTextEffect28, "Attendere Prego", "Impact", _
                                               80#, msoFalse, msoFalse, 100#, 100#)
    ''' mettiamo le celle a Generale
     range1_2.Select
     Selection.NumberFormat = "General"
      Range("A1").Activate
    ''' qui li portiamo tutti a valore
    For Each cella In range1_2
       cella.Replace What:=".", Replacement:=","
       Cells(cella.Row, cella.Column) = --(cella)
    Next
     s.Delete
    Set s = Nothing
    Set range1_2 = Nothing
    Application.EnableEvents = True
    MsgBox " Elaborazione Terminata "
    End Sub
    






  • di Claudio (utente non iscritto) data: 23/11/2013 22:04:36

    Ho capito per quanto riguarda la formula nella formattazione condizionale. Però vorrei adattare questa macro a tutto il foglio, si può?



  • di Claudio (utente non iscritto) data: 25/11/2013 16:57:59

    Basta modificare così il range?
     
    Set range1_2 = Range("A1:Z1000")



  • di Mister_x (utente non iscritto) data: 25/11/2013 17:10:36

    NO
    altrimenti ti ritorna un errore quando incontra celle con parole nella conversione e allinizio ti mette tutti 0
    in questo caso o inserisci degli if di controllo o come a detto V.F. adottare l'unione di range()
    ess. adesso ti rirovi
    Range("A7:Z16,A18:Z28")
    inserire manualmente altri Range
    Range("A7:Z16,A18:Z28")
    Range("A7:Z16,A18:Z28,A30:Z40") ecc. ecc.
    per non incorrere in errore
    e' un po' un lavoro da certosino ma si puo' evitare se conosci il VBA con dei controlli alla cella


    ciao Mister_x
     
    Range("A7:Z16,A18:Z28")
    Range("A7:Z16,A18:Z28,A30:Z40") ecc. ecc.
    






  • di Claudio (utente non iscritto) data: 25/11/2013 17:23:29

    Ho capito, non ci avevo pensato alle parole. Ma non si può aggiungere alla tua Sub un rigo di codice del tipo:
    se ci sono delle parole saltale?



  • di Claudio (utente non iscritto) data: 25/11/2013 17:28:43

    Quel foglio che ho allegato è solo una parte del foglio intero che è composto da molti range con quei numeri in formato testo e poi varia da settimana a settimana, quindi è sempre un problema............



  • di Mister_x (utente non iscritto) data: 25/11/2013 23:58:28

    ciao claudio
    Terminato il Film in TV

    se il problema e' che cambiano spesso i riferimenti, questa sub() dovrebbe sopperire ai tuoi problemi,
    il range() di lavorazione lo elabora da sola, basta siano da colonna A a Colonna Z

    ciao Mister_x
     
    Option Explicit
    Sub Da_testo_a_numero()
    Dim rangeA1_ZX As Range
    Dim cella As Variant, Xcella As Variant
    Dim s As Shape  ''nome dello shapes
    Set rangeA1_ZX = Range("A1:Z" & Cells(Rows.Count, "A").End(xlUp).Row + 2)
    Application.EnableEvents = False
     DoEvents
     Range("A1").Select
    Set s = ActiveSheet.Shapes.AddTextEffect(msoTextEffect28, "Attendere Prego", "Impact", _
                                               80#, msoFalse, msoFalse, 100#, 100#)
    For Each cella In rangeA1_ZX
     Xcella = cella.Value
      If Xcella <> "" And IsNumeric(Xcella) Then
          With cella
            .NumberFormat = "General"
            .Replace What:=".", Replacement:=","
          End With
        Cells(cella.Row, cella.Column) = --(cella)
      End If
    Next
    
    MsgBox " Elaborazione Terminata "
     s.Delete
    Set s = Nothing
    Set rangeA1_ZX = Nothing
    Application.EnableEvents = True
    End Sub
    
    
    






  • di Mister_x (utente non iscritto) data: 26/11/2013 15:05:23

    riciao

    ti posto la sub() completa con la formattazione condizionale di Min() e Max() delle celle sulla riga
    ti posto anche il file con la Sub() gia' inserita

    ciao Mister_x
     
    Option Explicit
    Sub Da_testo_a_numero()
    Dim rangeA1_ZX As Range
    Dim cella As Variant, Xcella As Variant
    Dim s As Shape  ''nome dello shapes
    Set rangeA1_ZX = Range("A1:Z" & Cells(Rows.Count, "A").End(xlUp).Row + 1)
    Application.EnableEvents = False
     DoEvents
      [A1].Select
      rangeA1_ZX.FormatConditions.Delete
    Set s = ActiveSheet.Shapes.AddTextEffect(msoTextEffect28, "Attendere Prego", "Impact", _
                                               80#, msoFalse, msoFalse, 100#, 100#)
    For Each cella In rangeA1_ZX
     Xcella = cella.Value
      If Xcella <> "" And IsNumeric(Xcella) Then
          With cella
            .NumberFormat = "General"
            .Replace What:=".", Replacement:=","
          End With
        Cells(cella.Row, cella.Column) = --(cella)
      End If
    Next
    With rangeA1_ZX
       .FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=A1="""""
     ''.FormatConditions(1).Interior.ColorIndex = 6
       .FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=A1=MIN($A1:$Z1)"
        .FormatConditions(2).Interior.ColorIndex = 44
        .FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=A1=MAX($A1:$Z1)"
        .FormatConditions(3).Interior.ColorIndex = 33
    End With
    MsgBox " Elaborazione Terminata "
     s.Delete
    Set s = Nothing
    Set rangeA1_ZX = Nothing
    Application.EnableEvents = True
    End Sub
    
    
    






  • di Claudio (utente non iscritto) data: 26/11/2013 22:50:03

    Ok, troppo gentile! Quell'Attendere Prego fatto in quel modo è semplicemente meraviglioso! Grazie mille