Condividi:        

EXCEL VBA aiuto snellimento macro

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

EXCEL VBA aiuto snellimento macro

Postdi MatteoPP » 10/10/14 11:19

Buongiorno a tutti,
ieri mi sono imbattuto in un problema che ho risolto parzialmente. Parzialmente perche purtroppo ( avendo preso da poco in mano VBA per Excel) ho dovuto creare 6 macro.
Vi chiederei cortesemente se, secondo voi, è possibile cerare un unico codice che faccia tutto quanto.
sostanzialmente ho due codici diversi solo che uno si riepte 5 volte sempre piu esteso.
Vi copio il primo codice e poi due similari

Codice: Seleziona tutto
Sub inserisciriga()

Dim fine As Long
fine = 10000
For x = 2 To fine
If Cells(x + 1, 1) <> Cells(x, 1) Then
Cells(x + 1, 1).Select
Selection.EntireRow.Insert
fine = fine + 1
x = x + 1

End If
Next x
End Sub


POI:

Codice: Seleziona tutto
Sub Macro1()

For i = 1 To 7400
If Cells(i, 1) = Cells(i + 1, 1) Then
Cells(i + 1, 2).Select
Selection.Cut
Cells(i, 3).Select
ActiveSheet.Paste

Cells(i + 1, 1).Select
Selection.EntireRow.Delete

 End If
   Next i

End Sub



per arrivare all ultima macro che è
Codice: Seleziona tutto
Sub Macro5()


For i = 1 To 6650

If Cells(i, 1) = Cells(i + 1, 1) Then
Cells(i + 1, 2).Select
Selection.Cut
Cells(i, 18).Select
ActiveSheet.Paste

Cells(i + 1, 3).Select
Selection.Cut
Cells(i, 19).Select
ActiveSheet.Paste

Cells(i + 1, 4).Select
Selection.Cut
Cells(i, 20).Select
ActiveSheet.Paste

Cells(i + 1, 5).Select
Selection.Cut
Cells(i, 21).Select
ActiveSheet.Paste


Cells(i + 1, 6).Select
Selection.Cut
Cells(i, 22).Select
ActiveSheet.Paste

Cells(i + 1, 7).Select
Selection.Cut
Cells(i, 23).Select
ActiveSheet.Paste

Cells(i + 1, 8).Select
Selection.Cut
Cells(i, 24).Select
ActiveSheet.Paste

Cells(i + 1, 9).Select
Selection.Cut
Cells(i, 25).Select
ActiveSheet.Paste

Cells(i + 1, 10).Select
Selection.Cut
Cells(i, 26).Select
ActiveSheet.Paste

Cells(i + 1, 11).Select
Selection.Cut
Cells(i, 27).Select
ActiveSheet.Paste

Cells(i + 1, 12).Select
Selection.Cut
Cells(i, 28).Select
ActiveSheet.Paste

Cells(i + 1, 13).Select
Selection.Cut
Cells(i, 29).Select
ActiveSheet.Paste
Cells(i + 1, 1).Select
Selection.EntireRow.Delete

 End If
   Next i


End Sub



vi ringrazio in anticipo per l'interessamento


EDIT Flash ore 04:50 - Inserito codice VBa nel contesto CODE
MatteoPP
Utente Junior
 
Post: 10
Iscritto il: 07/10/14 09:29

Sponsor
 

Re: EXCEL VBA aiuto snellimento macro

Postdi Zer0Kelvin » 10/10/14 11:47

Ciao.
Innanzitutto ti consiglio caldamente, quando inserisci del codice VBA nel post, di utilizzare i tag CODE; in questo modo la leggibilità del codice aumenta di molto.
Poi, per cominciare, la sintassi di Range.Cut è
Codice: Seleziona tutto
espressione.Cut(Destination)

Quindi tutte le espressioni simili a questa
Codice: Seleziona tutto
Cells(i + 1, 2).Select
Selection.Cut
Cells(i, 18).Select
ActiveSheet.Paste

possono essere scritte così
Codice: Seleziona tutto
Cells(i + 1, 2).Cut Cells(i, 18) 'origine -> destinazione

Una volta snellito il codice sarà più facile vedere se e come le macro possono essere fuse assieme.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: EXCEL VBA aiuto snellimento macro

Postdi MatteoPP » 10/10/14 15:37

Ciao e grazie, scusami ma non sono ne esperto di VBA ne esperto di questo blog.
ho fatto quello che hai detto, spero possa esserti d aiuto per aiutarmi.!!!







Codice: Seleziona tutto
Sub inserisciriga()

Dim fine As Long
fine = 10000
For x = 2 To fine
If Cells(x + 1, 1) <> Cells(x, 1) Then
Cells(x + 1, 1).Select
Selection.EntireRow.Insert
fine = fine + 1
x = x + 1

End If
Next x
End Sub


Codice: Seleziona tutto
Sub Macro1()
espressione.Cut(Destination)

For i = 1 To 7400
If Cells(i, 1) = Cells(i + 1, 1) Then
Cells(i + 1, 2).Cut Cells(i, 3)
ActiveSheet.Paste
Cells(i + 1, 1).Select
Selection.EntireRow.Delete

End If
Next i

End Sub


ovviamente c'e anche la macro 2 3 e 4 che sono semplicemente l aumentare delle celle da copiare fino ad arrivare alla amcro 5
Codice: Seleziona tutto
Sub Macro5()
espressione.Cut(Destination)

For i = 1 To 6650
If Cells(i, 1) = Cells(i + 1, 1) Then
Cells(i + 1, 2).Cut Cells(i, 18)
ActiveSheet.Paste

Cells(i + 1, 3).Cut Cells(i, 19)
ActiveSheet.Paste


Cells(i + 1, 4).Cut Cells(i, 20)
ActiveSheet.Paste

Cells(i + 1, 5).Cut Cells(i, 21)
ActiveSheet.Paste
MatteoPP
Utente Junior
 
Post: 10
Iscritto il: 07/10/14 09:29

Re: EXCEL VBA aiuto snellimento macro

Postdi MatteoPP » 10/10/14 16:03

riscrivo la macro 5 eprche prima non era completa.

Codice: Seleziona tutto
Sub Macro5()
espressione.Cut(Destination)

For i = 1 To 6650
If Cells(i, 1) = Cells(i + 1, 1) Then
Cells(i + 1, 2).Cut Cells(i, 18)
ActiveSheet.Paste

Cells(i + 1, 3).Cut Cells(i, 19)
ActiveSheet.Paste


Cells(i + 1, 4).Cut Cells(i, 20)
ActiveSheet.Paste

Cells(i + 1, 5).Cut Cells(i, 21)
ActiveSheet.Paste



Cells(i + 1, 6).Cut Cells(i, 22)
ActiveSheet.Paste

Cells(i + 1, 7).Cut Cells(i, 23)
ActiveSheet.Paste

Cells(i + 1, 8).Cut Cells(i, 24)
ActiveSheet.Paste

Cells(i + 1, 9).Cut Cells(i, 25)
ActiveSheet.Paste

Cells(i + 1, 10).Cut Cells(i, 26)
ActiveSheet.Paste

Cells(i + 1, 11).Cut Cells(i, 27)
ActiveSheet.Paste


Cells(i + 1, 12).Cut Cells(i, 28)
ActiveSheet.Paste

Cells(i + 1, 13).Cut Cells(i, 29)
ActiveSheet.Paste

Cells(i + 1, 1).Select
Selection.EntireRow.Delete

End If
Next i
MatteoPP
Utente Junior
 
Post: 10
Iscritto il: 07/10/14 09:29

Re: EXCEL VBA aiuto snellimento macro

Postdi Zer0Kelvin » 10/10/14 16:19

Senza entrare in merito alla correttezza del codice (secondo me, nella macro inserisciriga ci sono degli errori) , quanto segue dovrebbe essere equivalente alle 3 macro da te allegate:
Codice: Seleziona tutto
Sub inserisciriga()
Dim fine As Long, x As Long
    fine = 10000
    For x = 2 To fine
        If Cells(x + 1, 1) <> Cells(x, 1) Then
            Cells(x + 1, 1).EntireRow.Insert
            fine = fine + 1
            x = x + 1
        End If
    Next x
End Sub

Sub Macro1()
Dim i As Long
    For i = 1 To 7400
        If Cells(i, 1) = Cells(i + 1, 1) Then
            Cells(i + 1, 2).Cut Cells(i, 3)
            Cells(i + 1, 1).EntireRow.Delete
        End If
    Next i
End Sub

Sub Macro5()
Dim i As Long, c As Long
    For i = 1 To 6650
        If Cells(i, 1) = Cells(i + 1, 1) Then
            For c = 2 To 13
                Cells(i + 1, c).Cut Cells(i, c + 16)
            Next c
            Cells(i + 1, 1).EntireRow.Delete
        End If
    Next i
End Sub
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23


Torna a Applicazioni Office Windows


Topic correlati a "EXCEL VBA aiuto snellimento macro":


Chi c’è in linea

Visitano il forum: Nessuno e 74 ospiti