Somma numeri pari



  • Somma numeri pari
    di Edoardo (utente non iscritto) data: 04/02/2013 17:54:42

    avevo chiesto su yahoo answer e mi avevano detto di venire qui. Avevo chiesto un programma di basic:

    Intanto ho 10 numeri in Excel in colonna A (13-16-12-21-10-8-11-17-18-10).
    1) Acquisire un numero intero (InputBox) compreso tra 1 e 10. Se il numero non è compreso tra 1 e 10 il programma termina.
    Sommare tutti i numeri PARI da quello che occupa la posizione equivalente al numero fino alla fine (se non aveste capito, devo sommare i numeri pari di Excel che mi sono stati dati dalla riga indicata da n (il numero inserito) in poi).
    Visualizzare la somma.

    2) Copiare in colonna C solo i valori >15.

    La risposta mi è stata data:
    Sub inizio()
    Dim i As Integer
    Dim n As Integer
    Dim somma As Integer
    Dim riga As Integer

    n = InputBox("Inserisci numero:")

    If n > 0 And n < 11 Then
    For i = n To 10
    If Cells(i, 1) Mod 2 = 0 Then
    somma = somma + Cells(i, 1)
    End If
    Next i
    MsgBox ("La somma dei numeri pari è " & somma)

    Else
    Exit Sub
    End If

    For i = 1 To 10
    If Cells(i, 1) > 15 Then
    riga = riga + 1
    Cells(riga, 3) = Cells(i, 1)
    End If
    Next
    End Sub

    solo che nel primo punto mi viene dato non la somma corrispondente a tutti i valori pari successivamente solo a quello corrispondente alla casella! Come va modificato?



  • di Vecchio Frac data: 04/02/2013 18:06:11

    Ciao e benvenuto,
    correggi così:

    If i Mod 2 = 0 Then
    somma = somma + Cells(i, 1)
    End If

    Questo codice somma i numeri delle righe pari da quella indicata compresa.
    Forse il codice può riscriversi meglio... vediamo chi ha voglia di cimentarsi ^_^





  • di Vecchio Frac data: 04/02/2013 18:21:21

    cit. " Forse il codice può riscriversi meglio"
    ---> Senza nessunissima offesa per chi ha perso tempo a scriverti un codice facile facile (LOL) che, essendo una "consegna" potevi almeno provare a fare da te ^_^





  • di HarryBosch data: 04/02/2013 18:45:04

    Nessuna offesa, sono io il misterioso "progettista" della sub di Edoardo ^_^

    Ho pensato che per un compito scolastico tali passeggi fossero più aderenti (e più comprensibili) alla richiesta iniziale. Ma si potrebbe risolvere più velocemente come ipotizzato da VecchioFrac :)

    Comunque, mi sembra che la richiesta sia quella di conteggiare tutti i numeri pari che partano dalla riga "n": questo se i tuoi numeri cominciano dalla cella A1 (come specificato).
    Probabilmente hai una riga di intestazione il che fa slittare la cella di partenza.

    Se vuoi posta il file con i dati così verifichiamo...
    e magari mettiamo anche una soluzione alternativa



  • di Vecchio Frac data: 04/02/2013 18:48:12

    cit. " sono io il misterioso "progettista" della sub di Edoardo ^_^ "
    ---> Eh eh lo so... per questo mi sono permesso!
    Tanto per divertirci un po' allego una mia versione, forse un po' meno immediata ma certo più fantasiosa :)
     
    Option Explicit 
    
    Sub inizio()
    Dim i As Integer, n As Integer, somma As Integer
    
        n = InputBox("Inserisci un numero tra 1 e 10, zero per uscire:")
        If n <= 0 Or n > 10 Then Exit Sub
        
        For i = n + (n Mod 2) To 10 Step 2
            somma = somma + Cells(i, 1)
        Next i
        MsgBox ("La somma dei numeri pari è " & somma)
        
        [c:c].ClearContents
        [a1].Insert shift:=xlShiftDown
        With [a1]
            .Value = "xxx"
            .AutoFilter field:=1, Criteria1:=">15"
            ActiveSheet.[a1:a10].SpecialCells(xlCellTypeVisible).Copy [c1]
            .AutoFilter
            .EntireRow.Delete shift:=xlShiftUp
        End With
    End Sub






  • di Edoardo (utente non iscritto) data: 04/02/2013 19:00:55

    Aggiungendo quella parte dettami dal primo utente torna perfetto! sinceramente nell'ultima versione non capisco nulla lol! le mie conoscenze di basic sono piuttosto limitate sono in 2a liceo



  • di Edoardo (utente non iscritto) data: 04/02/2013 19:09:14

    se avete voglia provate a mettermici i commenti (ad ogni riga apparte msgbox e input tra gli accenti') tipo a for i= 1 to 10 cilo ricerca i e cose simili?



  • di Vecchio Frac data: 04/02/2013 19:26:48

    cit. " Aggiungendo quella parte dettami dal primo utente "
    ---> Se parli di HarryBosch certo... sei in una botte di ferro ^_^
     
    Sub inizio()
    'dimensioniamo correttamente le variabili
    Dim i As Integer, n As Integer, somma As Integer
    
        'chiediamo un valore all'utente
        n = InputBox("Inserisci un numero tra 1 e 10, zero per uscire:")
        'se il valore inserito è minore o uguale a zero oppure maggiore di 11 allora esci dalla procedura
        If n <= 0 Or n > 10 Then Exit Sub
        
        'inizia un ciclo, utilizza come contatore la variabile "i"
        'i parte da "n" (numero inserito dall'utente) più 1 se n è dispari, altrimenti più zero se n è pari
        'la funzione Mod restituisce il resto intero di una divisione, dividendo per due un numero
        'ottieni 1 se il numero è dispari, zero se il numero è pari
        'il ciclo for prosegue fino a 10 a passi (step) di 2
        'pertanto considera le righe pari a partire da quella indicata (se era pari parte da lì, 
        'se era dispari parte dalla successiva)
        For i = n + (n Mod 2) To 10 Step 2
            'tiene conto della somma dei valori che trova nelle celle che si trovano nella i-esima riga a partire da A1
            somma = somma + Cells(i, 1)
        Next i
        'visualizza un messaggio con la somma calcolata
        MsgBox ("La somma dei numeri pari è " & somma)
        
        'cancella la colonna C
        [c:c].ClearContents
        'inserisce una riga vuota in A1 e sposta tutto il resto verso il basso
        [a1].Insert shift:=xlShiftDown
    
        'considera la cella A1 per farci delle operazioni
        With [a1]
            'immette in A1 un valore fittizio
            .Value = "xxx"
            'genera un filtro automatico sulla colonna A in modo da ottenere solo i valori > 15
            .AutoFilter field:=1, Criteria1:=">15"
            'i valori così filtrati vengono copiati in C1
            ActiveSheet.[a1:a10].SpecialCells(xlCellTypeVisible).Copy [c1]
            'viene annullato il filtro automatico
            .AutoFilter
            'viene cancellata la prima riga e viene spostato il resto verso l'alto
            .EntireRow.Delete shift:=xlShiftUp
        End With
     
       'fine della procedura
    End Sub