Estrai valori (tosto)



  • Estrai valori (tosto)
    di Gianni (utente non iscritto) data: 19/02/2010

    Problema:
    10 dipendenti (a, b, c, ... k)
    53 codici assenza (c1, c2,... c53)

    i dati sono esposti sulle colonne a (dipendenti), b (codice ass.) e c (ore assenza).

    note:
    1) nella colonna a non compaiono sempre tutti i dipendenti, ma solo quelli che si sono assentati;
    2) i dati sono ordinati per colonna a crescente;

    vorrei estrarre, per ogni dipendente, le ore di assenza per ogni singolo codice.

    avevo pensato a cicli for-next, ma mi sono perso... chi mi può aiutare ?
    grazie, gianni






  • di Enzo (utente non iscritto) data: 19/02/2010

    Non conoscendo la variabile "codice assenza" ti ho inserito questa istruzione che dovrai adattare alle tue esigenze
    l'istruzione analizza i clienti in a1:k10
    con il codice assenza che io ho sintetizzato in "codice" in colonna b e le ore in colonna c
    se in colonna b trova "codice" allora ti scrive in colonna f il cliente trovato e in g le ore
    ti ripeto devi adattarlo
    se hai piu' clienti da trovare incrementa il ciclo for...next da 10 a quello che vuoi tu

     
    H = 1
    For i = 1 To 10
    If Range("b" & i) = "CODICE" Then
    Range("F" & H) = Range("A" & i)
    Range("G" & H) = Range("C" & i)
    H = H + 1
    End If
    Next i



  • di Gianni (utente non iscritto) data: 19/02/2010

    Lo provo subito e ti faccio sapere.
    intanto grazie per aver risposto



  • di Gianni (utente non iscritto) data: 19/02/2010

    Prima di provare mi sono accorto che metti
    for i = 1 to 10

    il fatto é che i dipendenti sono 10, ma possono essere riportati in più righe (per ogni codice assenza) e pertanto potrebbero diventare 10 (dipendenti) per 53 (codici assenze) 530 righe addirittura. allego uno stralcio del file per chiarire l'argomento:
    a c024 5,50
    a c670 2,50
    a c570 2,50
    b c710 1,40
    b cb60 8,00
    b c670 2,50
    b c919 0,07
    b c670 0,27
    b cb60 8,00
    b cb60 8,00
    c c023 8,25
    d c023 8,00
    d c023 8,00
    d c023 8,00
    d c670 1,10
    ecc....




  • Pivot
    di Rp71 (utente non iscritto) data: 19/02/2010

    Provare una pivot ?
    bye
    r
    vedi allegato esempio con i tuoi dati



  • di Gianni (utente non iscritto) data: 19/02/2010

    Vorrei risolvere il problema con codice vba.



  • di Rp71 (utente non iscritto) data: 19/02/2010

    ... allora mi eclisso



  • di Ricky53 (utente non iscritto) data: 19/02/2010

    Ciao,
    tutto dipende dalle esigenze però le pivot fanno proprio quello che hai chiesto tu ed in modo facilissimo!!!

    il vba lo devi conoscere e poi per le implementazioni non è che si fanno da sole.

    con le pivot saresti indipendente.

    ciao da ricky53



  • di Gianni (utente non iscritto) data: 19/02/2010

    Era per quello che nel titolo avevo aggiunto tosto !!!



  • di Ricky53 (utente non iscritto) data: 19/02/2010

    Ciao,
    sei proprio deciso con il vba?

    allora inizia con uno schema delle operazioni che vuoi fare, poi vediamo insieme come proseguire.
    mai quanto conosci della programmazione.

    si lavorerà a più mani (tu e noi).

    dal forum non avrai un pacchetto chiavi in mano ma tanti validi aiutanti che ti proporranno idee innanzi tutto e poi codice ma non il file già completo: non ti rimarrebbe nulla e nelfuturo come potresti operare.

    tra gli aiutanti ci sono anch'io ovviamente.

    ciao da ricky53



  • di Gianni (utente non iscritto) data: 20/02/2010

    Prima di tutto voglio chiarire un paio di cose:
    non ho chiesto la torta pronta e nemmeno mi interessa e da autodidatta sono in grado di creare qualche riga in vba per risolvere il problema; ma é il metodo che non mi sembra il migliore e più avanti spiego il perché.
    le mie conoscenze mi suggeriscono di fare un ciclo for per ogni dipendente e, all'interno del primo ciclo un altro for per sommare i vari codici assenza di quel dipendente. e questo sono capace di farlo da me.
    quello che chiedo é sistema migliore (probabilmente esisterà) per abbreviare il tutto che mi sembra eccessivamente ricorsivo.
    e' tutto.
    ora se c'é qualcuno in grado di suggerirmi la via, ok. altrimenti ciccia.
    saluto tutti

     
    for x 1 to ennesimo dipendente
      for y 1 to 53
        se per quel dipendente il codice assenza
         = A allora somma_di_A = somma_di_A + valore
        ecc...
        ecc...
        fine se
      next y
    next x



  • di Ricky53 (utente non iscritto) data: 21/02/2010

    Ciao,

    premesso che:
    importante è il risultato che devi ottenere.

    la tua soluzione con i due cicli mi sembra valida ed ottimizzata.

    consiglio: inserisci ad inizio macro
    application.screenupdating= false
    ed allfa fine ripristina con
    application.screenupdating= true

    velocizza l'elaborazione, ad esempio nel caso tu debba scrivere in alcune celle dei dati.

    non sempre quello che si pensa di fare è il modo migliore per risolvere il problema.

    ti ripropongo la soluzione delle pivot che mi sembra la più efficace ed efficiente, inoltre, ti consente modifiche immediate a quanto ottenuto.

    io, fossi in te, una prova la farei.

    ciao da ricky53