Condividi:        

macro excell per selezionare e copiare dati in 2° cartella

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

macro excell per selezionare e copiare dati in 2° cartella

Postdi Fede_rick » 03/06/17 20:11

Buonasera a tutti,

mi trovo nella situazione di dover creare, per lavoro, una macro per Excell che faccia una determinata operazione. Il problema è che il mio livello di conoscenza del VBA è prossimo allo zero (le uniche macro che ho creato finora sono quelle col registratore automatico).

Se sapeste darmi un aiuto sarebe fantastico (e magari consigliarmi qualche risorsa da cui iniziare a studiare VBA perchè comunque prima o poi dovrà impararlo).


Descrizione problema: ho una tabella in excell, in cui c'è la lista di tutti gli impiegati allocati su tutti i progetti attivi in azienda.
ogni impiegato può lavorare su più progetti, e ad ogni progetto possono lavorare più impiegati. Nessun impiegato può partecipare allo stesso progetto più i una volta nello stesso periodo di tempo (ovviamente).
fatte tali combinazioni nelle prime 2 colonne "impiegati" e "progetti", nelle seguenti colonne ci sono le % di allocazione di ogni impiegato su ogni progetto, con granularità settimanale (una colonna ogni settimana).

Ciò che la macro dovrebbe fare è: selezionare i nomi degli impiegati che lavorano ad un determinato progetto (es. progetto "5"), e per ognuno trovare la data, successiva alla data corrente, in cui l'allocazione sul progetto 5 è maggiore di zero. Trovare poi la data, successiva a quella appena trovata, in cui l'allocazione torna a zero. Infine trovare la media aritmetica delle % di allocazione nell'intervallo temporale trovato.
Copiare poi questi 4 dati (nome, inizio allocazione, fine allocazione, % media allocazione) su un secondo foglio di lavoro.

Allego file excell di esempio con la tabella che mi trovo nella prima cartella di lavoro, e subito sotto la tabella che dovrei creare nella seconda cartella di lavoro.
http://www.filedropper.com/macroselezio ... periodoe_1

Grazie mille a chiunque voglia darmi una mano

Federico
Fede_rick
Newbie
 
Post: 6
Iscritto il: 03/06/17 18:18

Sponsor
 

Re: macro excell per selezionare e copiare dati in 2° cartel

Postdi Anthony47 » 05/06/17 00:45

Ciao Federico, benvenuto nel forum.
Per fare quello che chiedi ti propino questa "Funzione":
Codice: Seleziona tutto
Function ProjWF(ByVal Dip As String, ByRef myArea As Range, ByVal PJect As Long) As Variant
Dim RArr(1 To 3), FlSt As Boolean, FlEnd As Boolean, I As Long, J As Long, SumPro As Single
'
    For I = 1 To myArea.Rows.Count
    If myArea.Cells(I, 1) = UCase(Dip) And myArea.Cells(I, 2) = PJect Then
        pcol = Application.Match(CLng(Int(Now)), myArea.Cells(1, 1).Resize(1, myArea.Columns.Count))
        If Not IsError(pcol) Then
            For J = pcol To myArea.Columns.Count
                If myArea.Cells(1, J) >= Int(Now) And FlSt = False Then
                    If myArea.Cells(I, J) > 0 Then
                        FlSt = True
                        RArr(1) = J
                    End If
                End If
                If FlSt = True Then SumPro = SumPro + myArea.Cells(I, J)
                If FlSt = True And myArea.Cells(I, J) = 0 Then
                    FlEnd = True
                    RArr(2) = J - 1
                End If
                If FlEnd Then Exit For
            Next J
            If FlEnd = False Then FlEnd = True: RArr(2) = J - 1
        End If
    End If
    If FlEnd Then Exit For
Next I
If RArr(1) * RArr(2) > 0 Then
    RArr(3) = SumPro / (RArr(2) - RArr(1) + 1)
    RArr(1) = myArea.Cells(1, RArr(1))
    RArr(2) = myArea.Cells(1, RArr(2)) + 7
Else
    RArr(3) = ""
    RArr(2) = ""
    RArr(1) = ""
End If
ProjWF = RArr
End Function

Essa ti consentira' di scrivere formule, come si fa con le funzioni native di excel, il cui risultato sara' su 3 colonne dal contenuto che hai chiesto.

Per cominciare metti il codice in un Modulo standard del vba, es Modulo1 (sai come si fa, vero?).

Poi torna su Excel.
Per comodita' le elaborazioni successive le faccio sullo stesso Foglio1 del file che contiene la programmazione dei progetti.
Per dimostrazione mi sono creata una tabella con le intestazioni di riga e di colonna che vedi in questa figura:
Immagine
upload immagini
Come vedi in verticale ci sono i nominativi e in orizzontale, a gruppi di 3 colonne, il numero del progetto.
Seleziona ora G24:I24, e inserisci questa formula nella barra della formula:
Codice: Seleziona tutto
=ProjWF($F24;$A$4:$R$20;G$23)

conferma con Contr-Maiusc-Enter, non il solo Enter
Questa ti restituira' per il Dipendente A e il progetto 1: la data iniziale (la prima data superiore o uguale a Oggi con impegno su quel progetto); la data finale; la media dell'impegno nel periodo

Se ora copi G24:I24 verso il basso avrai i dati sempre sul progetto 1 per gli altri dipendenti elencati in F24 e sottostanti.
Se ora copi il primo blocco di formule verso destra, avrai i dati per il progetto 2, il progetto 3 etc etc

La sintassi della Funzione ProjWF e la seguente:
Codice: Seleziona tutto
Projwf(Nominativo o Riferimento del dipendente; Riferimenti della tabella di Programmazione; Numero del progetto)

La prima riga della Tabella di Programmazione deve contenere in Riga1, dalla terza colonna in avanti, la data di inizio della settimana; il Nominativo deve trovarsi nella Prima colonna, il numero del progetto nella Seconda.

Abbiamo messo le formule sullo stesso file e sullo stesso foglio, ma puoi benissimo metterle in un altro foglio, o in un altro file: usando la sintassi standard di excel per indirizzare celle esterne potrai ottenere il risultato voluto.
L'unico vincolo e' che il file utilizzato deve contenere il codice della Funzione ProjWF

Fanne buon uso...
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro excell per selezionare e copiare dati in 2° cartel

Postdi Fede_rick » 11/06/17 22:28

Ciao Anthony,

grazie mille del benvenuto e dell'aiuto che mi hai dato col codice e la descrizione dettagliata.
Ho creato la funzione col tuo codice (cambiando solo il tipo di variabile PJect in string perchè al lavoro i progetti hanno nomi veri e propri) ed é perfetta, ne farò certamente buon uso! ;)
Ho qualche base di programmazione in C da vecchi studi universitari, spero mi torni utile per addolcire un po' la curva d'apprendimento del VBA :)
Ancora grazie!
Federico
Fede_rick
Newbie
 
Post: 6
Iscritto il: 03/06/17 18:18


Torna a Applicazioni Office Windows


Topic correlati a "macro excell per selezionare e copiare dati in 2° cartella":


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti