Inserisci celle: aiuto



  • Inserisci celle: aiuto
    di Maurittiel data: 23/11/2010

    Ho una miriade di dati da sistemare!!
    questo è un esempio:
    codfam codfam1 std1 std2 valore volume
    1 1 167 14 10,53 4000
    3 3 167 14 9,63 2800
    117 117 167 14 3,06 2100
    119 119 167 14 5,22 3800
    121 121 167 14 12,72 8100
    122 122 167 14 0,92 700
    123 123 167 14 5,09 3450
    124 124 167 14 2,4 1850
    126 126 167 14 0,78 400
    127 127 167 14 2,2 1250
    128 128 167 14 5,04 2450
    130 131 167 14 0,74 400
    131 133 167 14 9,05 4800
    133 169 167 14 5,1 800
    169 200 167 14 4,33 1625

    non devo fare altro che far corrispondere il codfam con il codfam1, quindi dove sono diversi devo semplicemente inserire celle sotto per ottenere la seguente situazione:

    1 1 167 14 10,53 4000
    3 3 167 14 9,63 2800
    117 117 167 14 3,06 2100
    119 119 167 14 5,22 3800
    121 121 167 14 12,72 8100
    122 122 167 14 0,92 700
    123 123 167 14 5,09 3450
    124 124 167 14 2,4 1850
    126 126 167 14 0,78 400
    127 127 167 14 2,2 1250
    128 128 167 14 5,04 2450
    130
    131 131 167 14 0,74 400
    133 133 167 14 9,05 4800

    come potrei farlo in automatico?

    vi prego aiutatemi



  • di Baz (utente non iscritto) data: 23/11/2010

    Avrei pensato alla seguente macro che sembra funzionare con l'esempio da te riportato...

    fai sapere

    ciao
     
    Function Riordina()
    Dim r
    
    'esegue un ciclo su tutte le celle della colonna A
    For r = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(r, 1) <> Cells(r, 2) And Cells(r, 2) <> "" Then
            'se il valore nella cella nella colonna A è <> dalla cella colonna B (e non vuoto)
            'inserisco una nuova linea
            Range(Cells(r, 2), Cells(r, 6)).Insert Shift:=xlDown
            r = r - 1
        End If
    Next r
    


  • Inserisci celle: aiuto
    di Maurittiell (utente non iscritto) data: 24/11/2010

    Innanzitutto grazie.
    premetto che sono un neofita in queste cose!
    penso che non funzioni a meno che ho sbagliato a fare qualcosa.
    ho allegato il file da elaborare, se sarebbe cosi gentile da inserirmi il codice della macro, o a spiegarmi come si fa le sarei molto grato! ps. ho excel 2007



  • di Ricky53 (utente non iscritto) data: 24/11/2010

    Ciao,
    il file allegato non si riesce ad aprire correttamente. puoi allegarlo in formato 2003.

    inoltre non tutti gli utenti hanno il 2007.

    ciao da ricky53



  • di Baz (utente non iscritto) data: 24/11/2010

    Volente o nolente io sto utilizzando il 2007 e come già detto, con il tuo esempio funziona; se riuscissi postare più righe da "aggiustare" potrei vedere se funziona o meno


    poi per l'inserimento del codice lo vediamo pure assieme, non preoccuparti, l'ho imparato anch'io

    ciao


  • Inserisci celle: aiuto
    di Maurittiell (utente non iscritto) data: 24/11/2010

    Ho allegato (in alto a destra) due file excel uguali solo che uno è nella versione 2003 e l'altro nella versione 2007!



  • di Baz (utente non iscritto) data: 24/11/2010

    Ciao,
    a seguito la procedura (spero completa) per inserire il codice che ti posto;
    prova e fai sapere.

    ovviamente il primo codice non poteva funzionare in quanto le due colonne di riferimento non sono formattate nel medesimo modo.

    ciao


    per inserire un modulo:
    1- aprire il file
    assicurati che la protezione
    strumenti -> macro -> protezione sia impostata su "medio"
    altrimenti nessuna macro verrà attivata
    2- premere alt+f11 (si aprire l'editor di visual basic)
    3- posizionarsi nella finestra "progetto - vbaproject" (in alto a sx)
    4- selezionare il file sul quale vuoi inserire il codice (es. cartel1)
    5- premere il tasto dx del mouse inserisci -> modulo
    6- copiare il codice nel modulo che si è appena aperto
    7- premi alt+f8 e seleziona la macro da eseguire (riordina)

     
    Sub Riordina()
    Dim r As Long
    Dim nIns As Integer
    
    Application.ScreenUpdating = False
    
    'esegue un ciclo su tutte le celle della colonna A
    For r = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        If Val(Cells(r, 1)) <> Val(Cells(r, 2)) Then
            'se il valore nella cella nella colonna A è <> dalla cella colonna B (e non vuoto)
            'inserisco una nuova linea
            Range(Cells(r, 2), Cells(r, 9)).Insert Shift:=xlDown
           nIns = nIns + 1
        End If
    Next r
    
    Application.ScreenUpdating = True
    MsgBox "Fine" & Chr(13) & nIns & " inserimenti"
    
    End Sub


  • Risolto
    di Maurittiell (utente non iscritto) data: 24/11/2010

    La macro era perfetta ha risolto il problema! queste applicazioni sono strepitose tanto che ho cercato di crearne una da solo ma ovviamente non ci sono riuscito!
    volevo creare una macro che facesse la copia del contenuto da e a g di svariati fogli dello stesso file a partire dal foglio asparagi e le incollasse in un unico foglio dello stesso file nominato completi! la macro che ho riportato funziona solo per il foglio asparagi ma non conosco i comandi per ripetere l'operazione su tutti gli altri fogli!

     
    Sub incolla()
    '
    ' incolla Macro
    '
    
    '
        Sheets("Asparagi").Select
        Columns("E:G").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Completi").Select
        Columns("E").Select
        ActiveSheet.Paste
    End Sub
    



  • di Baz (utente non iscritto) data: 25/11/2010

    Ciao,

    1
    sono contento tu abbia risolto.

    2
    mi fa anche piacere notare che si prova nel trovare la soluzione; a seguito un semplice ciclo for dove ti viene indicato ad ogni foglio il nome a video, alla fine ti dice il totale dei fogli.

    sicuramente riuscirai adattarla alle tue esigenze.

    ciao
     
    Function nFogli()
    Dim i
    
    For i = 1 To Sheets.Count
        MsgBox Sheets(i).Name
    Next i
    
    MsgBox "totale " & i - 1 & " fogli"
    
    End Function
    


  • Inserisci colonne
    di Maurittiell (utente non iscritto) data: 25/11/2010

    Ho apportato le seguenti modifiche, funziona ma ovviamente le colonne le incolla sempre partendo da e mentre dovrebbe essere da e fino a g poi riprendere a incollare i dati del secondo foglio da h fino a j etc.potresti indicarmi la modifica da apportare?

    grazie
     
    Sub incolla()
    '
    ' incolla Macro
    '
    
    '
        Sheets("Asparagi").Select
        Columns("E:G").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Completi").Select
        Columns("E").Select
        ActiveSheet.Paste
    End Sub
    
    
    Function nFogli()
    Dim i
    
    For i = 4 To Sheets.Count
        MsgBox Sheets(i).Name
        Sheets(i).Select
        Columns("E:G").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Completi").Select
        Columns("E").Select
        ActiveSheet.Paste
    Next i
    
    MsgBox "totale " & i - 1 & " fogli"
    
    End Function
    



  • di Baz (utente non iscritto) data: 25/11/2010

    Ciao,
    prova così.
    ti faccio presente solo il fatto che l'ultimacolonna viene calcolata rispetto alla riga 1 , quindi valuta se ti va bene.

    ti ho tolto le varie select che escono dal registratore di macro, che ovviamente, in questo caso non servono.
     
    Function nFogli()
    Dim i
    Dim UltimaColonna
    
    For i = 4 To Sheets.Count
        'trovo l'ultima colonna occupata
        UltimaColonna = Cells(1, Columns.Count).End(xlToLeft).Column
        
        Application.CutCopyMode = False
        Sheets(i).Columns("E:G").Copy
        
        'incollo le colonne E:G del foglio nel foglio Completi
        Sheets("Completi").Cells(1, UltimaColonna + 1).PasteSpecial xlPasteAll
    Next i
    
    MsgBox "Fine copia"
    
    End Function


  • Grazie
    di Maurittiell (utente non iscritto) data: 25/11/2010

    Baz non so chi tu sia, ma sei un genio!!

    grazie



  • di Baz (utente non iscritto) data: 25/11/2010

    Felice esserti stato utile