Acquista i nostri libri consigliati su Amazon.it
Discussione chiusa
Visualizzazione dei risultati da 1 a 9 su 9

Excel: da 150 righe e 13 colonne a 600 righe e 4 colonne!

  1. #1
    ciao a tutti..
    Grosso problema con Excel: aiuto!!!

    Io ho un file composto da 150 righe e 13 colonne. la prima colonna contiene l'elenco dei nomi, le restanti 12 contengono i dati relativi a tre diverse variabili riportati per 4 anni diversi (3*4=12).

    ___|var1_2008 | var1_2009 | var1_2010 | var1_2011 | var2_2008 | var2_2009 | ...... var2_2011
    a
    b
    c

    Io, partendo da questo file, dovrei arrivare ad avere 600 righe e una solo colonna per ogni variabile:
    _______ | var1 | var2 | var3 | var4
    a 2008
    a 2009
    a 2010
    a 2011
    b 2008
    b 2009
    b 2010
    ...


    possibile in qualche modo farlo senza dover copiare uno a uno (o 4 a 4 nel mio caso) i dati? non so usare le macro ma se l'unico modo per farlo e voi avete la pazienza di spiegarmelo posso farcela!!

  2. #2
    GiuseppeMN non  in linea Scribacchino
    Buona sera, Martina;
    proverei con una matrice inserita in un codice VBA.

    Per ho bisogno di una informazione; la Tua sequenza deve essre:
    a 2008
    a 2009
    a 2010
    a 2011

    b 2008
    b 2009
    b 2010

    .
    .
    .
    o pittosto:

    A - Var1 2008....A - VAR2 2008....A - VAR3 2008
    A - Var1 2009....A - VAR2 2009....A - VAR3 2009
    A - Var1 2010....A - VAR2 2010....A - VAR3 2010
    A - Var1 2011....A - VAR2 2011....A - VAR3 2011


    B - Var1 2008....B - VAR2 2008....B - VAR3 2008
    B - Var1 2009....B - VAR2 2009....B - VAR3 2009
    B - Var1 2010....B - VAR2 2010....B - VAR3 2010
    B - Var1 2011....B - VAR2 2011....B - VAR3 2011

    .
    .
    .
    Il mio dubbio dove inserire le Var2 e Var3 nel Tuo esempio.

    Grazie dell'attenzione che vorrai dedicarmi.

    Buona serata.

    Giuseppe
    Ultima modifica di GiuseppeMN; 14-11-2012 20:00 

  3. #3
    la prima!!! nelle righe devo avere il nome dall'azienda (a,b,c..) e gli anni (come hai messo tu), mentre nelle colonne le varie variabili..
    grazie mille.
    buona serata a te!
    Ultima modifica di martina_locatelli; 14-11-2012 19:59 

  4. #4
    GiuseppeMN non  in linea Scribacchino
    Ciao Martina;
    quindi uan cosa di questo genere? :

    A 2008 .... Var1....VAR2....VAR3
    A 2009 .... Var1....VAR2....VAR3
    A 2010 .... Var1....VAR2....VAR3
    A 2011 .... Var1....VAR2....VAR3


    B 2008 .... Var1....VAR2....VAR3
    B 2009 .... Var1....VAR2....VAR3
    B 2010 .... Var1....VAR2....VAR3
    B 2011 .... Var1....VAR2....VAR3
    Se questa la sequenza corretta, provo ad impostare il codice VBA.

    Giuseppe

  5. #5
    esattamente!! proprio cos
    grazie

  6. #6
    GiuseppeMN non  in linea Scribacchino
    Ciao, Martina;
    ho una buona notizia e ... una meno buona!
    La buona che sono arrivato a questo risultato:
    
    A2008	Var1 2008-A	Var2 2008-A	Var3 2008-A
    A2009	Var1 2009-A	Var2 2009-A	Var3 2009-A
    A2010	Var1 2010-A	Var2 2010-A	Var3 2010-A
    A2011	Var1 2011-A	Var2 2011-A	Var3 2011-A
    B2008	Var1 2008-B	Var2 2008-B	Var3 2008-B
    B2009	Var1 2009-B	Var2 2009-B	Var3 2009-B
    B2010	Var1 2010-B	Var2 2010-B	Var3 2010-B
    B2011	Var1 2011-B	Var2 2011-B	Var3 2011-B
    C2008	Var1 2008-C	Var2 2008-C	Var3 2008-C
    C2009	Var1 2009-C	Var2 2009-C	Var3 2009-C
    C2010	Var1 2010-C	Var2 2010-C	Var3 2010-C
    C2011	Var1 2011-C	Var2 2011-C	Var3 2011-C
    .
    .
    .
    DQ2008	Var1 2008-DQ	Var2 2008-DQ	Var3 2008-DQ
    DQ2009	Var1 2009-DQ	Var2 2009-DQ	Var3 2009-DQ
    DQ2010	Var1 2010-DQ	Var2 2010-DQ	Var3 2010-DQ
    DQ2011	Var1 2011-DQ	Var2 2011-DQ	Var3 2011-DQ
    DR2008	Var1 2008-DR	Var2 2008-DR	Var3 2008-DR
    DR2009	Var1 2009-DR	Var2 2009-DR	Var3 2009-DR
    DR2010	Var1 2010-DR	Var2 2010-DR	Var3 2010-DR
    DR2011	Var1 2011-DR	Var2 2011-DR	Var3 2011-DR
    DS2008	Var1 2008-DS	Var2 2008-DS	Var3 2008-DS
    DS2009	Var1 2009-DS	Var2 2009-DS	Var3 2009-DS
    DS2010	Var1 2010-DS	Var2 2010-DS	Var3 2010-DS
    DS2011	Var1 2011-DS	Var2 2011-DS	Var3 2011-DS
    DT2008	Var1 2008-DT	Var2 2008-DT	Var3 2008-DT
    DT2009	Var1 2009-DT	Var2 2009-DT	Var3 2009-DT
    DT2010	Var1 2010-DT	Var2 2010-DT	Var3 2010-DT
    DT2011	Var1 2011-DT	Var2 2011-DT	Var3 2011-DT
    
    
    e questo, credo fosse il Tuo obbiettivo.

    La notizia meno buona che devo ottimizzare il codice (se lo pubblico cos com', mi cacciano dal Forum per indegnit!)

    Scherzi a parte, il codice che ho pensato si basa su una matrice del tipo Public Anni(13, 600) As String che viene riempita con un ciclo For Next per la prima colonna e un ciclo For Next per le rimanenti tre colonne. I risultati vanno trascritti in un nuovo Foglio di lavoro; in questo modo avrai un Foglio1 con i dati originali nel quale ho semplicemente aggiunto un tasto tramite il quale attivo il codice VBA che si occupa di riportare i dati formattati nel Foglio2.

    Ripeto che il codice va ottimizzato; mi ci dedico domani mattina. Promesso!

    A domani.

    Buona notte o forse ... buona giornata (dipende da quando mi leggi).

    Giuseppe

  7. #7
    ricky53 non  in linea Scribacchino
    Ciao,
    ecco la mia proposta
    Option Explicit
    
    Sub Copia_Dati_da_Pi_colonne()
        Dim UR As Long, I As Long, J As Long, K As Long, L As Long, X As Long, Y As Long, Ws1 As Worksheet, Ws2 As Worksheet
        Set Ws1 = Worksheets("Foglio1") ' <<===== Se occorre cambia il nome del foglio
        Set Ws2 = Worksheets("Foglio2") ' <<===== Se occorre cambia il nome del foglio
    
        Application.ScreenUpdating = False
        Ws2.Columns("A:E").ClearContents
    
    ' Qui vanno stritte le intestazioni di colonna
        Ws2.[A1] = "Nome": Ws2.[B1] = "Anno": Ws2.[C1] = "Var1": Ws2.[D1] = "Var2": Ws2.[E1] = "Var3"
            
        UR = Ws1.Range("A" & Rows.Count).End(xlUp).Row
        Y = 2
        For I = 2 To UR
            For J = 1 To 4
                K = 1
                Ws2.Cells(Y, 1).Value = Ws1.Cells(I, 1)
                Ws2.Cells(Y, 2) = Right(Ws1.Cells(1, J + 1), 4)
                L = 1
                For X = 3 To 5
                    Ws2.Cells(Y, X) = Ws1.Cells(I, J + L)
                    L = L + 4
                Next X
                Y = Y + 1
            Next J
        Next I
        Application.ScreenUpdating = True
        Set Ws1 = Nothing: Set Ws2 = Nothing
        MsgBox "Elaborazione Effettuata"    
    End Sub
    
    I dati di partenza sono nel Foglio1, quelli di destinazione sono nel Foglio2.
    Se i nomi dei fogli sono diversi cambiali nel codice

    Prova e sono QUI
    Ultima modifica di ricky53; 15-11-2012 01:23 
    ℹ️ Leggi di pi su ricky53 ...

  8. #8
    GiuseppeMN non  in linea Scribacchino
    Buona giornata, Martina;
    come promesso, Ti propongo il seguente codice; non molto "elegante" ma, per il momento, questo:
    Sub prova()
    Dim y As Byte, w As Byte
    Dim x As Integer
    Dim Anni(4, 600) As String
    Application.ScreenUpdating = False
        w = 2
        For x = 1 To 600 Step 4
            Anni(1, x) = Cells(w, 1) & "2008"
            Anni(1, x + 1) = Cells(w, 1) & "2009"
            Anni(1, x + 2) = Cells(w, 1) & "2010"
            Anni(1, x + 3) = Cells(w, 1) & "2011"
        w = w + 1
        Next x
        w = 2
        For x = 1 To 600 Step 4
            Anni(2, x) = Cells(w, 2)
            Anni(2, x + 1) = Cells(w, 3)
            Anni(2, x + 2) = Cells(w, 4)
            Anni(2, x + 3) = Cells(w, 5)
    
            Anni(3, x) = Cells(w, 6)
            Anni(3, x + 1) = Cells(w, 7)
            Anni(3, x + 2) = Cells(w, 8)
            Anni(3, x + 3) = Cells(w, 9)
    
            Anni(4, x) = Cells(w, 10)
            Anni(4, x + 1) = Cells(w, 11)
            Anni(4, x + 2) = Cells(w, 12)
            Anni(4, x + 3) = Cells(w, 13)
        w = w + 1
        Next x
        
        Sheets("Foglio2").Select
        Cells.ClearContents
        Range("A1") = "Azienda Anno"
        Range("B1") = "Var 1-Azienda-Anno "
        Range("C1") = "Var 2-Azienda-Anno "
        Range("D1") = "Var 3-Azienda-Anno "
        For x = 1 To 600
            For y = 1 To 4
                Cells(x + 1, y) = Anni(y, x)
                Cells(x + 1, y) = Anni(y, x)
                Cells(x + 1, y) = Anni(y, x)
                Cells(x + 1, y) = Anni(y, x)
            Next y
        Next x
    Application.ScreenUpdating = True
        Range("E2").Select
    End Sub
    
    il risultato sar questo:
    Azienda Anno    Var1-Azienda-Anno 	Var2-Azienda-Anno 	Var3-Azienda-Anno 
    A2008	        Var1-   A   -2008	Var2-   A   -2008	Var3-   A   -2008
    A2009	        Var1-   A   -2009	Var2-   A   -2009	Var3-   A   -2009
    A2010	        Var1-   A   -2010	Var2-   A   -2010	Var3-   A   -2010
    A2011	        Var1-   A   -2011	Var2-   A   -2011	Var3-   A   -2011
    B2008	        Var1-   B   -2008	Var2-   B   -2008	Var3-   B   -2008
    B2009	        Var1-   B   -2009	Var2-   B   -2009	Var3-   B   -2009
    B2010	        Var1-   B   -2010	Var2-   B   -2010	Var3-   B   -2010
    B2011	        Var1-   B   -2011	Var2-   B   -2011	Var3-   B   -2011
    .
    .
    .
    DS2008	        Var1-   DS  -2008	Var2-   DS  -2008	Var3-   DS  -2008
    DS2009	        Var1-   DS  -2009	Var2-   DS  -2009	Var3-   DS  -2009
    DS2010	        Var1-   DS  -2010	Var2-   DS  -2010	Var3-   DS  -2010
    DS2011	        Var1-   DS  -2011	Var2-   DS  -2011	Var3-   DS  -2011
    DT2008	        Var1-   DT  -2008	Var2-   DT  -2008	Var3-   DT  -2008
    DT2009	        Var1-   DT  -2009	Var2-   DT  -2009	Var3-   DT  -2009
    DT2010	        Var1-   DT  -2010	Var2-   DT  -2010	Var3-   DT  -2010
    DT2011	        Var1-   DT  -2011	Var2-   DT  -2011	Var3-   DT  -2011
    
    Non conscendo i valori di Var1,Var2 e Var3, ho dichiarato la matrice come String; nel caso in cui siano valori numerici, e debbano essere elaborati come tali, puoi dichiarare la matrice semplicemente come Dim Anni(4, 600).
    Avrei preferito evitare di incrementare le variabili (x + 1, x + 2 ...) ma avrei dovuto aggiungere almeno una variabile.

    A disposizione.

    Buona giornata e buon lavoro.

    Giuseppe

  9. #9
    L'avatar di @Alex
    @Alex non  in linea Moderatore Globale
    Violata la regola del CROSSPOST, questo 3D pubblicato anche su altri FORUM.
    Chiudo la discussione richiamando all'attenzione.
    ℹ️ Leggi di pi su @Alex ...

Discussione chiusa

Potrebbero interessarti anche ...

  1. Risposte: 18
    Ultimo Post: 20-05-2015, 11:55
  2. macro excel per foglio con intestazioni su righe e colonne
    Da enrico130572 nel forum Microsoft Excel
    Risposte: 3
    Ultimo Post: 21-12-2013, 13:22
  3. [Excel] Dimensione carattere intestazioni righe e colonne
    Da Poldo69 nel forum Microsoft Excel
    Risposte: 3
    Ultimo Post: 05-11-2010, 16:40
  4. [Excel]Spostare grande volume dati da Righe in COLONNE
    Da mrmaxi nel forum Microsoft Excel
    Risposte: 1
    Ultimo Post: 22-11-2006, 00:45
  5. Da excel ad Access invertendo le righe in colonne
    Da Luana75 nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 01-11-2005, 16:44