Codice Macro



  • Codice Macro.
    di Robsol (utente non iscritto) data: 07/09/2012 09:46:50

    Ciao a tutti ragazzi...ho un piccolo problema. Sono un neo autodidatta di Vba di excel e non molto esperto. Ho creato una piccolissima macro, che fondamentalmente fa questo lavoro: nella colonna CC, da CC5 a CC200 ho dei pesi(sono a loro volta il risultato di una piccola operazione tra celle), mentre nelle colonne da AF(da AF5 a AF200) a CA(da CA5 a CA200) ho dei valori; la macro mi resituisce semplicemente il prodotto tra il peso e i miei valori (es. cella CC5*AF5, CC5*AG5, e cosi' via fino ad AF5*CA5).
    Io vorrei che la macro si interrompesse quando nella colonna del peso, cioe' quella CC, non vi sia nulla, senza invece continuare a calcolarmi il tutto fino a 200, restituendomi valori pari a 0. (avendo cioe' una sfilza enorme di valori a 0).
    Non so se mi sono spiegato benissimo...spero possiate aiutarmi!

     
        Range("CD5").Select
        ActiveCell.FormulaR1C1 = "=RC81*RC[-50]"
        Range("CD5").Select
        Selection.AutoFill Destination:=Range("CD5:DV5"), Type:=xlFillDefault
        Range("CD5:DV5").Select
        Selection.AutoFill Destination:=Range("CD5:DV200"), Type:=xlFillDefault
        Range("CD5:DV200").Select
        ActiveWindow.SmallScroll Down:=-303



  • di HarryBosch data: 07/09/2012 10:17:02

    Ciao Robsol
    la soluzione migliore sarebbe impostare un ciclo e uscire da esso qualora la cella successiva sia vuota...
    In sostanza calcola il risultato tra la cella CA5 e AF5 e lo riporta nella cella CC5.
    Cosi via per le successive 200 righe, ma si ferma quando nella prima colonna CA trova la cella vuota.

    Prova a scrivere il codice che ti posto qua sotto..
    mi sono basato sui riferimenti che hai scritto


     
    Sub calcola()
    Dim i As Integer
    For i = 5 To 205
        If Range("CA" & i) = "" Then Exit Sub
        Range("CC" & i) = Range("CA" & i) * Range("AF" & i)
    Next i
    End Sub
    


  • Codice Macro.
    di Robsol (utente non iscritto) data: 07/09/2012 10:52:04

    Ciao HarryBosch, grazie mille per l'attenzione. Mi sono spiegato male. Cerco di essere piu' chiaro, perche' rileggendo ho fatto un po' di confusione.
    la macro funziona cosi', va per righe. CC5, che e' il mio peso, moltiplica tutte le celle da AF5 a CA5, e il loro prodotto e' riportato da CD5 a DV5. (CD5=CC5*AF5, CE5=CC5*AG5...)
    Cosi' accade con CC6, e con tutte le altre CC, fino a 200.
    Io vorrei che la macro pero' si interrompesse quando la cella CC(numero) sia vuota.
    E ne approffitto per chiederti anche questo: la cella CC50 e' il risultato di A50/sum(A5:A200). Se A50 e' vuota, io vorrei che in CC50 non si vedesse nulla, mentre invece vedo 0. Anche questo deve valere per tutte le celle da CC5 a CC200.

    Grazie mille



  • di Vecchio Frac data: 07/09/2012 11:30:57

    versione di Excel utilizzata...?
    In Excel 2003 per non vedere gli zeri puoi impostare Strumenti --> Opzione --> togli la spunta a "Zeri".
    In questo modo le celle vengono comunque calcolate, ma gli zeri non vengono mostrati.
    Nota che l'impostazione è generale e non vale solo per il file corrente. Quindi se apri Excel per un altro lavoro, l'opzione rimane memorizzata. Alternativa: una riga di codice che all'inizio della sessione di lavoro toglie gli Zeri e all'uscita dal file (o dal foglio attivo, come vuoi) li reimposta:

    ActiveWindow.DisplayZeros = False





  • di HarryBosch data: 07/09/2012 11:35:01

    oK ora è chiaro...
    Prova con il codice sotto.
    Per quanto riguarda il fatto di non mostrare lo 0 segui le indicazioni di Vecchio Frac.
    Oppure, modifica la formula con un SE davanti, del tipo:
    =SE((A50/SOMMA(A5:A200))=0;"";A50/SOMMA(A5:A200))
     
    Sub calcola()
    Dim i As Integer, c As Integer
    For i = 5 To 205
        If Range("CC" & i) = "" Then Exit Sub
        For c = 1 To 48
        Cells(i, c + 81) = Cells(i, c + 31) * Range("CC" & i)
        Next c
    Next i
    End Sub
    


  • Codice Macro.
    di Robsol (utente non iscritto) data: 07/09/2012 11:44:21

    Grazie mille! Entrambi gentilissimi.
    Per la questione dello 0, cambiero' la formula usando l'if..then..

    grazie mille ancora!