Metodo Find su numeri



  • Metodo Find su numeri
    di Textomb data: 07/11/2015 00:12:29

    Salve ragazzi,
    Ricordo di essermi imbattutto altre volte in una problematica del genere.
    Ma non ricordo come ne ero uscito.
    Allego un file con la soluzione che ho trovato adesso.
    Ho un range di valori con dei numeri formattati in un certo modo (all'interno i valori contengono una formula).
    Devo selezionare la cella che contiene il valore max.
    La mia soluzione prevede di assegnare "provvisoriamente" il formato standard e poi tornare alla formattazione originaria.
    Però la cosa, sebbene sia funzionante, non mi piace moltissimo.
    Qualche idea migliore?
     
    Sub SelectMax()
    Dim ActFormat As String
    Dim MaxN As Double
    MaxN = WorksheetFunction.Max(Range("D3:D15"))
        ' memorizzo il formato attuale del Range
        ActFormat = Range("D3").NumberFormat
        ' lo sostituisco con quello generale in modo da non avere problemi con il metodo Find
        With Range("D3:D15")
            .NumberFormat = "general"
            .Find(What:=MaxN, LookIn:=xlValues).Select
            'reimposto il formato originario
            .NumberFormat = ActFormat
        End With
    
    End Sub
    



  • di Mister_x (utente non iscritto) data: 07/11/2015 09:39:20

    ciao

    in questo caso io preferisco usare un ciclo For piu' che la funzione find()

    ciao


     
    Sub sel_val_max()
    Dim mas As Variant, val As Variant
    Set mas = Range("D3:D15")
    For Each val In mas
     If val = Application.Max(mas) Then
        Cells(val.Row, val.Column).Select
        Exit For
     End If
    Next
    Set mas = Nothing
    End Sub






  • di Textomb data: 07/11/2015 09:50:08

    ciao Mister_x
    grazie per la risposta. Purtroppo però non voglio utilizzare cicli di alcun tipo perchè il Range su cui devo effettuare la ricerca non è costituito da poche righe come nell'esempio che ho proposto. Stiamo parlando di migliaia di valori...



  • di cromagno data: 07/11/2015 12:29:59

    Ciao a tutti,
    @Textomb
    visto che hai usato la funzione max, potresti usare anche la funzione "match"...
     
    Sub SelectMax2()
    Dim riga As Long
    Dim massimo As Double
    
    massimo = WorksheetFunction.Max(Range("D3:D15"))
    riga = WorksheetFunction.Match(massimo, Range("D:D"), 0)
    Range("D" & riga).Select
    
    End Sub



  • di isy data: 07/11/2015 13:01:24

    Ciao

    In alternativa
    Per ottenere una ricerca nel solo Range("D3:D15") propongo:
     
    Option Explicit
    '
    Sub SelectMax()
      Dim x As String
      x = Range("D3:D15").Address
      Cells(Evaluate("MATCH(MAX(" & x & ")," & x & ",0)") + Range(x).Cells(1, 1).Row - 1, Range(x).Cells(1, 1).Column).Select
    End Sub



  • di Textomb data: 07/11/2015 17:25:23

    grazie a tutti per le risposte.
    Credo di capire che il metodo Find produce delle incongruenze (per non dire casini) con i separatori decimali e migliaia e quindi le celle formattate non si trovano facilmente quando si deve impostare il parametro xlValues.
    Non è facile da digerire questa cosa...



  • di Mister_x (utente non iscritto) data: 07/11/2015 22:41:29

    ciao textomb

    quindi tutta la sub() si puo' scrivere su una sola riga

    ciao
     
    Sub SelectMax()
      Range("D:D").Find(What:=Application.Max(Range("D:D")), LookIn:=xlValues).Select
    End Sub






  • di Textomb data: 08/11/2015 00:42:13

    ciao Mister_x
    Come già detto, la tua sub non funzionerà per via della formattazione del numero che non è riconosciuto correttamente.
    Difatti sono stato costretto a raggirare il problema applicando provvisoriamente il formato standard e poi, riapplicare il formato originario "ActFormat"



  • di patel data: 08/11/2015 08:16:33

    non ho capito se le soluzioni con match ti funzionano





  • di Textomb data: 08/11/2015 09:06:49

    @patel
    chiaramente le soluzioni alternative al metodo Find funzionan. Vedi quella di cromagno e di isy (sempre grazie). Ma il mio quesito era rivolto espressamente all'applicabilità del metodo Find...



  • di Mister_x (utente non iscritto) data: 08/11/2015 16:21:37

    ciao textomb

    a questo punto sarei curioso di capire che tipi di formattazione stai usando in queste celle,
    io ho sempre capito che quello che vedi non e' realmente il valore di quella cella
    prendiamo ad esempio un orario e tanto per non complicarci al vita le ore 12:00:00,
    noi vediamo questo ma in realta' il suo valore e' 0,5,
    quindi rimango sempre nel mio sapere che quello che vediamo non e realmente quello che vale una cella

    quindi mi puoi dire per mia curiosita' che formattazione hai in queste celle da non poter valutare con find()

    ciao





  • di Textomb data: 08/11/2015 18:50:15

    @Mister_x
    cit:a questo punto sarei curioso di capire che tipi di formattazione stai usando in queste celle...
    Appunto per questa ragione avevo allegato un file...
    ciao.