Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Aggiunta anni per panel di dati

Ultimo Aggiornamento: 07/02/2017 16:03
Post: 2
Registrato il: 27/01/2017
Utente Junior
Excel 2016
OFFLINE
27/01/2017 19:15

Ciao a tutti!

Probabilmente quello che andrò a chiedervi è molto banale ma sono abbastanza neofita circa tutte le vere potenzialità di Excel e spero, col tempo, di imparare quanto più possibile...

Vi espongo brevemente ciò che devo realizzare. Questo è il primo step del panel di dati che ho da realizzare nelle prossime settimane. Sarà un file molto grande con un ammontare di dati provenienti da diverse fonti. Nello specifico ho da aggiungere per ciascuno dei paesi della lista il numero di anni in colonna (dal 1960 al 2015) e copiare allo stesso tempo le celle contenenti il nome della nazione (Country_Name), l'abbreviazione (Country_Code), la regione (Region) e il numero di riferimento per ciascuna nazione (Country_Number). Questi valori/numeri dovranno essere uguali per tutte le celle aggiuntive, quelle degli anni. Tale operazione voglio applicarla a ciascun stato, se possibile.

Nel file che ho caricato (basic.xlxs) c'è l'operazione fatta unicamente per la prima nazione (Afghanistan)... che ovviamente ho fatto "a mano", considerando le mie poche competenze.

Spero di esser stato chiaro nell'esplicare il cosa vorrei realizzare. Ringrazio anticipatamente chiunque possa aiutarmi. Grazie! :)
Post: 3.661
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
27/01/2017 20:17

Sub a()
LR = Cells(Rows.Count, "A").End(xlUp).Row
DR = 2
For R = 2 To LR
  For anno = 1960 To 2015
    Range("A" & R & ":D" & R).Copy Range("G" & DR)
    Range("K" & DR) = anno
    DR = DR + 1
  Next
Next
End Sub

naturalmente devi eliminare le righe che hai agggiunto per farci capire
[Modificato da patel45 28/01/2017 09:44]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 2
Registrato il: 27/01/2017
Utente Junior
Excel 2016
OFFLINE
28/01/2017 10:07

Ti ringrazio moltissimo. Ho eseguito il comando (eliminando prima le "righe esempio" che avevo aggiunto) e il risultato è stato proprio quel che desideravo. Grazie! [SM=g27823]
Post: 3
Registrato il: 27/01/2017
Utente Junior
Excel 2016
OFFLINE
30/01/2017 17:02

Riprendo la medesima discussione poiché la mia domanda è simile ma più complicata. Ora mi trovo con un database pubblico della FAO (http://www.fao.org/faostat/en/#home) organizzato in un formato panel. Ho allegato il file in questo post (FAOSTAT_2017.xlsx).
Nella colonna "Area" sono riportati i vari stati, in quella "Item" i vari indicatori di mio interesse e in quella "Year" i vari anni di riferimento per ciascun stato-indicatore con il valore riportato ovviamente nella colonna "Value". Come si può notare per gli anni in cui non vi sono valori la riga è proprio assente. Ad esempio i dati degli stati creatisi dopo la dissoluzione dell'Unione Sovietica.
Io vorrei che per tutti gli stati e per tutti gli indicatori venissero aggiunte delle righe per tutti gli anni mancanti con valore nullo (casella vuota, anche il valore 0 andrebbe bene). Il time frame che mi interessa avere è sempre lo stesso: 1960-2015. Quindi, ad esempio per l'Uzbekistan - i cui dati iniziano unicamente dal 1992 - vorrei vi fossero tante righe quanti siano gli anni mancanti, quindi un numero di righe dal 1960-1991 (31 righe) per ciascuno degli indicatori. Non è fondamentale che vi siano righe aggiuntive anche per il 2015 (infatti tutti i vari indicatori hanno dati che arrivano fino al 2013 o 2014).
Spero di esser stato chiaro nell'esporre la mia problematica. Mi rendo conto che ciò che chiedo è un po' eccessivo, forse. Ringrazio anticipatamente chiunque volesse aiutarmi. Grazie! [SM=g27817]
[Modificato da Nicola Caravaggio 30/01/2017 17:04]
Post: 3.672
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
30/01/2017 18:08

sarà un po' lenta
Sub inserisci()
LR = Cells(Rows.Count, "A").End(xlUp).Row
For r = LR To 3 Step -1
  cod = Cells(r, "G")
  anno = Cells(r, "I")
  If cod <> Cells(r - 1, "G") Then
  Stop
    If anno > 1961 Then
       dif = anno - 1961 - 1
       Rows(r & ":" & r + dif).Insert
    End If
  End If
Next
End Sub


----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 4
Registrato il: 27/01/2017
Utente Junior
Excel 2016
OFFLINE
31/01/2017 01:40

Ti ringrazio molto, ancora una volta. Lo script che mi hai fornito funziona. Purtroppo... mi sono accorto che non è proprio quello che mi serve, o meglio, non riesco ancora a completare l'ordinamento del panel. Aggiungendo infatti altre variabili queste hanno intervalli non continui di dati e quindi la macro che mi hai fornito giustamente non mi dà il risultato che voglio. Ho provato a modificarla ma, con le mie poche competenze, sono riuscito in ben poco. L'ideale sarebbe che per ciascun paese e ciascun indicatore vi fossero indicati tutti gli anni (sempre gli stessi 1960-2015) con valori nulli per i dati che non sono riportati.
Alla fine dovrei riportare ciascun indicatore in colonna nel foglio "2" del file allegato (quello che ho creato grazie alla prima risposta in questo thread).
Sono sino ad ora riuscito ad inserire altri dati provenienti da altre fonti ma questi, per via dell'assenza delle righe nei valori mancanti, mi manda un po' in (molta) difficoltà.
Non so se in alternativa vi è un modo per far associare i valori del primo foglio al secondo...

Il file purtroppo è troppo grande per esser caricato qui e dunque ho dovuto ricorrere ad un sito di host, spero non sia un problema. Qui il link per scaricarlo: https://www.mediafire.com/?d2sambkz43zwu09

N.B. Alcuni paesi non hanno valori per alcuni indicatori, ad esempio la Croazia non ha nessun valore per l'indicatore "Credit to Agriculture", quindi non sono presenti nel panel, eppure servirebbe che vi fossero ugualmente i valori nulli per il range di anni 1960-2015.

Grazie ancora per chi vorrà cimentarsi nuovamente nelle mie richieste. Spero di essermi spiegato e... spero questa sia l'ultima... non vogliatemene... [SM=g27819]
Post: 3.675
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
31/01/2017 09:06

con file grandi si lavora male, meglio allegare un file con 5 nazioni che contemplino tutti i casi possibili
[Modificato da patel45 31/01/2017 09:06]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 5
Registrato il: 27/01/2017
Utente Junior
Excel 2016
OFFLINE
31/01/2017 09:24

Ho allegato un file di prova estrapolando i dati solamente di 5 nazioni dal precedente set di dati (nella pagina 1). Nella pagina 2 vi è sostanzialmente in versione ridotta (esempio inventato) di quello che vorrei fare: prendere i dati delle colonne D-F e fargli "diventare" come quelli nelle colonne H-J. L'ultimo foglio di lavoro contiene invece il formato panel (realizzato con la prima istruzione fornitami) che dovrò riempire con i dati.
Ringrazio anticipatamente per chi volesse ancora aiutarmi! :)
[Modificato da Nicola Caravaggio 31/01/2017 09:25]
Post: 3.677
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
31/01/2017 10:33

non ho capito, spiega meglio con riferimento ai vari fogli

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 6
Registrato il: 27/01/2017
Utente Junior
Excel 2016
OFFLINE
31/01/2017 11:17

Mi rendo conto di esser stato poco chiaro.

Dunque...

Nel foglio "Prova" vi è un esempio inventato e breve di quello che sto attualmente facendo con i dati. Nelle prime 2 colonne (A-B) ho il range di anni che mi interessa per ciascun paese (nell'esempio ho messo 1990-2000) ma i miei dati effettivi hanno un range differente). Nelle colonne D-F ho sostanzialmente riportato quelli che potrebbero essere i formati dei dati che ho effettivamente estrapolato dal database della FAO, ovviamente senza tutte le altre colonne, solamente quelle che mi interessano: nome del paese, anno, valore. Questi dati devono essere riportati come nelle colonne H-J, ovvero l'intero range da anni con i valori inseriti nell'anno corrispettivo e valori nulli (celle vuote) quando invece nelle colonne dei dati non vi è il valore. Questo un semplice esempio di quella che è la "situazione" con i dati veri.

Nel foglio "Dati" mi interessano sostanzialmente 4 colonne: Area, Item, Year, Value. C'è anche l'ultima colonna, quella Dummy, ma non è fondamentale. Questi dati devo riportarti nel formato panel nel foglio "Panel", per ciascun indicatore una differente colonna con i dati a scendere, dal 1960 al 2015 per ciascuno stato, dall'Afghanistan fino allo Zimbabwe. Il "problema" è che nel foglio "Dati", seppur questi sono elencati per stato e in colonna, quando non vi è un valore per un determinato anno manca proprio la riga, quindi non saprei come riportare i dati sul foglio "Panel". In pratica, vorrei che per ciascuno stato ciascun indicatore abbia tutti gli anni, dal 1960 al 2015 e non solamente gli anni per i quali è stato riportato il valore. Vorrei fossero aggiunti quelli mancanti e che questi abbiano valore nullo. Inoltre, come dicevo in un precedente messaggio, alcuni indicatori potrebbero non essere presenti per alcuni stati, per questi quindi vorrei fosse assegnata comunque una colonna corrispondente a quel determinato indicatore "mancante" e che abbia ovviamente tutti valori nulli.

Spero di esser riuscito a spiegarmi. Grazie ancora per la pazienza.
Post: 7
Registrato il: 27/01/2017
Utente Junior
Excel 2016
OFFLINE
02/02/2017 00:37

Scusatemi se ritorno su questo thread. Penso di esser stato decisamente molto ma molto complicato nello spiegare quel che vorrei poter fare con Excel.
Allego un file esempio molto semplice. Nelle colonne A-B-C ho i miei dati. Io vorrei fare in modo che vengano riorganizzati come quelli nelle colonne E-F-G. Sostanzialmente aggiungere righe per gli anni mancanti.
Ovviamente io ho da effettuare ciò con un numero maggiore di individui ed anni.
Spero possiate aiutarmi. Grazie! [SM=g27823]
Post: 3.685
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
02/02/2017 09:46

Sub inse()
r = 2
DR = 2
Do While Cells(r, "A") <> ""
  For anno = 1990 To 2000
    If Cells(r, "C") = anno Then
      Range("A" & r & ":C" & r).Copy Range("E" & DR)
      DR = DR + 1
      r = r + 1
    Else
      If anno = 2000 Then
        Range("E" & DR) = Range("A" & r - 1)
      Else
        Range("E" & DR) = Range("A" & r)
      End If
      Range("G" & DR) = anno
      DR = DR + 1
    End If
  Next
Loop
End Sub

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 8
Registrato il: 27/01/2017
Utente Junior
Excel 2016
OFFLINE
07/02/2017 16:03

Perfetto! Grazie mille :)
Mi scuso per il ritardo nella risposta.
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 03:54. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com