Conta valori massimi



  • Conta valori massimi
    di tod2000 (utente non iscritto) data: 24/12/2014 08:43:20

    buongiorno,
    ho questo problema che non so risolvere; se qualcuno mi potesse aiutare ringrazio anticipamente.
    In colonna A ho diversi valori numerici con 2 decimali. Questi valori sono anche più volte ripetuti e variano in + e in -
    Da questa colonna di dati io ricavo un grafico a dispersione; a questo punto io vorrei sapere quanti picchi (valori) massimi ci sono
    rappresentati nel grafico stesso senza doverli contare manualmente. Ho buttato giù una macro qui sotto,
    ma ottengo solamente i valori maggiori della riga precedente e non il numero dei valori massimi del grafico.
    Mi potete aiutare


    A
    63,03
    63,03
    63,03
    62,76
    62,76
    62,76
    27,10
    62,76
    62,76
    62,56
    62,56
    62,43
    62,45
    62,45
    61,48
    62,54
    62,75

     
    Sub Test()
    Range("A2").Select
    k = [A2].Value
    r = Cells(Rows.Count, 1).End(xlUp).Row
    For x = 2 To r
        If Cells(x + 1, 1) > k Then n = n + 1
        k = Cells(x + 1, 1).Value
    Next x
    [D1] = n
    End Sub



  • di costopoco (utente non iscritto) data: 24/12/2014 09:01:09

    E se in D2 usassimo la funzione =CONTA.SE($A:$A;A2) da copiare nelle celle sottostanti?
    Per evitare che il risultato si ripeta più volte per lo stesso valore di riferimento potremmo utilizzare Formattazione condizionale.

    Nel caso in cui questa proposta non sia soddisfacente, possiamo passare alla modifica del codice VBA.


    costopoco, ma, visto che è Natale, ... costo 0 (zero)



  • di tod2000 (utente non iscritto) data: 24/12/2014 10:04:01

    buongiorno,
    non capisco a cosa serve, spiegati meglio.
    L'importante che il grafico sia lo stesso e quello che è più importante è sapere quanti picchi alti (o valori massimi rilevanti) ci sono nel grafico. (nel file allegato sono 62)
    grazie


  • conta valore massimo
    di canapone (utente non iscritto) data: 24/12/2014 11:08:36


    Ciao,

    forse è d'aiuto qualcosa di simile a

    =CONTA.SE(A2:A1000;MAX(A2:A1000))

    Saluti



  • di Mister_x (utente non iscritto) data: 24/12/2014 11:48:21

    ciao

    tu dici che di picchi ne conti nel file allegato N°62 quelli che vedi e che conti
    se io ti dicessi che in realta i picchi anche qualli minimi nel grafico che hai creato sono 1352 ??
    in questo caso cosa rispondi ????

    vuoi fare una prova sul tuo file !! in B2 metti la sequente formula
    B2=SE(E(A2>=A1;A2>A3);1;0) e trascina fino a dove ai dati, cella 6093
    dopo in una cella qualsiasi metti prendiamo la D1
    D1=CONTA.SE(B2:B10000;1)

    quindi in questo caso bisogna stabilire quanto e' di valore il picco massimo o minimo che non bisogna superare fra le forze in campo

    riallego il tuo file

    Buone Feste
    ciao







  • di Zer0Kelvin data: 24/12/2014 19:55:42

    Salve a tutti.
    Prendendo alla lettera il quesito "quanti picchi (valori) massimi ci sono", per fare questo è sufficiente determinare quali sono le celle che hanno valore maggiore della cella precedente e di quella successiva.
    Escludendo la prima e ultima cella (non avendo modo di sapere se siano o meno dei massimi) ed i valori consecutivi uguali (che non possono essere considerati dei picchi), si potrebbe usare il semplice codice che allego sotto che però, ripeto, conta solo i "veri" picchi.
    Se invece hai necessità di contare tutti i massimi (non i "valori" che sarebbero molti di più) bisogna procedere in maniera un pò differente.
     
    Sub test2()
    Dim cMax As Long, R As Long
        cMax = 0
        For R = 3 To Range("A2").End(xlDown).Row - 1
            If Cells(R, 1) > Cells(R - 1, 1) And Cells(R, 1) > Cells(R + 1, 1) Then cMax = cMax + 1
        Next R
        MsgBox cMax
    End Sub



  • di Zer0Kelvin data: 24/12/2014 20:02:11

    Questa invece dovrebbe contare tutti i massimi ignorando i valori ripetuti
     
    Sub test3()
    Dim cMax As Long, R As Long
        cMax = 0
        For R = 3 To Range("A2").End(xlDown).Row - 1
            If Cells(R, 1) > Cells(R - 1, 1) Then
                While Cells(R, 1) = Cells(R + 1, 1)
                    R = R + 1
                Wend
                If Cells(R, 1) > Cells(R + 1, 1) Then cMax = cMax + 1
            End If
        Next R
        MsgBox cMax
    End Sub
    



  • di tod2000 (utente non iscritto) data: 26/12/2014 09:15:07

    buongiorno a tutti,
    si, avrei la necessità di contare tutti i massimi, così come si vedono nel grafico. (62)
    grazie



  • di Zer0Kelvin data: 26/12/2014 09:48:45

    Non è così semplice, perchè i massimi, se non definisci nessun altro criterio, sono 414, non 62.



  • di Mister_x (utente non iscritto) data: 26/12/2014 10:56:42

    ciao

    mi associo a Zer0Kelvin, nel dirti che bisogna stabilire un criterio di calcolo per fare questo, anche perche' nel mio primo intervento di avevo gia' accennato
    (quindi in questo caso bisogna stabilire quanto e' di valore il picco massimo o minimo che non bisogna superare fra le forze in campo )
    sappi che questo lavoro io lo faccio gia' per calcolare le forze Niuton di una molla dove fino ad un certo carico di valori si stabilisce che anche se abbiamo picchi come tu dici pero' non si superano tali, non vengono rilevati, come picchi ma solamente kg costanti nella norma di utilizzo di tali, prendiamo ad esempio il tuo grafico,
    nel mio caso stabilirei che se supero i 70Niuton antrei a formare un picco, mentre se scendo sotto i 60Niuton andrei ad avere un alleggerimento al carico, quindi devo intervenire con delle variazioni a delle valvole per far si che questi non succeda o se succede deve essere in proporzione tale che in quel tempo che rilevo questi dati sia sotto la soglia del 3%

    comunque ti allego una parte modificata della mia che uso allegata al tuo file dove in B1 ho inserito questa e in F1 metto quanto deve essere il valore Niuton da non superare
    utilizzo
    B1=Picco(A$2:A$7000;F1)
    ciao


     
    Option Explicit
    Function Picco(Forze As Range, MaxPicco As Long) As Long
    Dim F_orze As Variant
    Dim Npicco As Long
    Npicco = 0
    Dim piu As Boolean
    piu = False
    For Each F_orze In Forze
      If F_orze > MaxPicco Then
         If piu = False Then
           Npicco = Npicco + 1
           piu = True
         End If
       Else
         If F_orze < MaxPicco Then piu = False
      End If
    Next
    Picco = Npicco
    End Function






  • di Mister_x (utente non iscritto) data: 26/12/2014 11:26:11

    riciao

    PS abituato a scrivere come leggo ,come forza si tratta di Newton Kg
    riciao