Minimo in Range Variabile



  • Minimo in Range Variabile
    di Baymai (utente non iscritto) data: 02/03/2016 07:04:46

    Buongorno a tutti,
    Sto cercando di creare un programmino VBA per far si che in base a due valori interi inseriti dall'utente in due distinte message box("Inizio", "Fine") riceva e utilizzi tali valori per discriminare un intervallo di righe(es.da 1 a 2) del mio foglio di calcola, passandola ad una function(che riporto sotto). Il problema nasce qua, in quanto all'interno della function desidererei restringere in maniera programmatica il range(per es. da col. A a col. C). Dentro tale intervallo infine, determinare riga per riga(Per quello ho ipotizzato di usare un ciclo for next) se il valore max-min dei valori riportati in tale riga supera il valore di "1". Se questo succede incrementa la variabile Ris di 1. Per rendere l'idea...Un utente inserisce Inizio=1 Fine=2 da msg.box...Il programma riceve, restringe il campo da colonna A a col. C, Ricava il val. massimo di riga 1(6), il minimo(4), esegue Max-Min(6-4=2)...Essendo maggiore di 1 non incrementa la variabile Ris e passa ad analizzare la riga successiva(riga 2).
    Se qualche buon anima riuscisse ad aiutarmi gliene sarei infinitamente grato!!!!!!!! Sto uscendo pazzo...Grazie mille a tutti, e complimenti per il forum!!!! Utilissimo e ben organizzato!

    A B C D E
    1 4 5 6 7 4
    2 2 2 3 4 2
    3 7 8 9 6 5
     
    Function v(ByVal Inizio As Integer, ByVal Fine As Integer) As Integer
    
    Dim i As Integer
    Dim Min As Double
    Dim Max As Double
    Dim Ris As Double
    Dim Colonne As Integer
    
    For i = Inizio To Fine Step 1
    For Colonne = 2 To 5
    Min = Workshitfunction.Min() 'Errore di debug
    Max = Workshitfunction.Max() 'Errore di debug
    if Max-Min>1 Then Ris = Ris+1 
    
    Next Colonne
    Next i
    
    
    



  • di Marius44 data: 02/03/2016 09:37:22

    Vado di fretta ma guarda che l'errore che ti dà (non entro nel merito del codice) è dovuto ad una errata scrittura.
    Devi mettere

    Worksheetfunction.

    con le due e al posto della i

    Ciao,
    Mario



  • di alfrimpa data: 02/03/2016 10:22:10

    scusate avevo scritto una cosa non corretta.

    Alfredo





  • di Albatros54 data: 02/03/2016 11:57:38

    Non è una funzione.
    incolla il codice sotto in VBA in un modulo, metti i valori nel foglio1.
    Forse fa quello che chiedi.  
     
    Sub MinthenMax()
    Dim rngrows As Range
    Dim myrow As Long
    Dim mymin As Double
    Dim mymax As Double
    Dim Ris As Double
    Dim LastColumn As Long
    For myrow = 1 To Foglio1.UsedRange.Rows.Count
    LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
        Set rngrows = Range(Cells(myrow, 1), Cells(myrow, LastColumn))
        mymin = Application.WorksheetFunction.Min(rngrows)
        mymax = Application.WorksheetFunction.Max(rngrows)
        MsgBox "Valore Min riga  " & myrow & " è: " & mymin
        MsgBox "Valore max riga " & myrow & " è: " & mymax
       If mymax - mymin < 1 Then Ris = Ris + 1
       MsgBox "Differenza Maggiore di uno sono " & myrow & " è: " & Ris
       
    Next myrow
    
    End Sub