Condividi:        

Macro allineamento celle Excel

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 allineamento celle Excel

Postdi ginorio » 11/06/12 07:54

Salve a tutti, vi chiedo un consiglio per un problema che mi affligge da qualche giorno: ho un foglio excel di circa 8000 righe e dovrei allineare due colonne di codici. Mi spiego meglio: se il codice nella colonna A è uguale al codice della colonna M tutto deve rimanere com'è; se invece i codici sono diversi bisogna spostare le celle in basso fino a trovare la prossima corrispondenza.
ES.
CODICE DESCR. QUANTITA' CODICE2 DESCR QUANTITA'
1AA01 XXXX 12 1AA01 XXXX 12
1AA02 YYYY 17
1AB03 ZZZZ 5

Vorrei automatizzare il tutto con una macro. E' possibile?
ginorio
Newbie
 
Post: 5
Iscritto il: 11/06/12 07:37

Sponsor
 

Re: Macro allineamento celle Excel

Postdi Flash30005 » 11/06/12 08:16

Ciao Ginorio e benvenuto nel Forum

E' sicuramente possibile ma dovresti inviare il file con un po' di codici già impostati (sfalsati) in un foglio
e, su un altro foglio, come vorresti, invece, avere l'allineamento dopo l'esecuzione della macro.

Per allegare il file puoi seguire questa procedura ma devi aver, prima, scritto tre post (ne puoi inviare due a vuoto)

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Macro allineamento celle Excel

Postdi ginorio » 11/06/12 08:30

ok, provvedo subito
ginorio
Newbie
 
Post: 5
Iscritto il: 11/06/12 07:37

Re: Macro allineamento celle Excel

Postdi ginorio » 11/06/12 08:38

Allegato
ginorio
Newbie
 
Post: 5
Iscritto il: 11/06/12 07:37

Re: Macro allineamento celle Excel

Postdi ginorio » 11/06/12 08:41

ginorio
Newbie
 
Post: 5
Iscritto il: 11/06/12 07:37

Re: Macro allineamento celle Excel

Postdi Flash30005 » 11/06/12 08:57

Ok ,
Vorrei sapere, però se il file contenente un solo foglio popolato è ciò che vorresti ottenere o se è la distribuzioni dei dati iniziali e quindi sapere come sono i dati del foglio "mancante" e che, solo per chiarezza, avevo chiesto.

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Macro allineamento celle Excel

Postdi ginorio » 11/06/12 09:01

E' cio che vorrei ottenere. Il file originale non ha spazi tra righe, è tutto compattato e ordinato per codice.
ginorio
Newbie
 
Post: 5
Iscritto il: 11/06/12 07:37

Re: Macro allineamento celle Excel

Postdi Flash30005 » 11/06/12 13:50

Allora considero un file di excel con tre fogli (Foglio1, Foglio2, Foglio3)
nel foglio1 inserirai la tua tabella con le righe compattate e ordinate
In un modulo inserisci questa macro test e perfezionabile
Codice: Seleziona tutto
Sub AllineaRighe()
Set Ws1 = Sheets("Foglio1")
Set WS2 = Sheets("Foglio2")
Set Ws3 = Sheets("Foglio3")
WS2.Cells.Clear
ActiveSheet.Range("A1:A30000").AdvancedFilter Action:=xlFilterInPlace, Unique:=False
Ws3.Cells.Clear
Ws1.Select
UR1a = Ws1.Range("A" & Rows.Count).End(xlUp).Row
UR1k = Ws1.Range("K" & Rows.Count).End(xlUp).Row
UR1 = UR1a
RR1Ini = 2
RR3Ini = 2
DUR = 0
MVR = ""
If UR1a < UR1k Then UR1 = UR1k
    Ws1.Range("A1:A" & UR1a).Copy Destination:=Ws3.Range("A1")
    Ws1.Range("K2:K" & UR1k).Copy Destination:=Ws3.Range("A" & UR1a + 1)
    Application.CutCopyMode = False

    Ws3.Select
    Columns("A:A").Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("A1").Select
    UR3 = Ws3.Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("A1:A" & UR3).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    For RR3 = RR3Ini To UR3
    TR = 0
    Ws1.Rows("1:1").Copy Destination:=WS2.Rows("1:1")

            For RR1 = RR1Ini To UR1
                If Rows(RR3 & ":" & RR3).EntireRow.Hidden = True And TR = 1 Then GoTo saltaD
                UR2a = WS2.Range("A" & Rows.Count).End(xlUp).Row + 1
                UR2k = WS2.Range("k" & Rows.Count).End(xlUp).Row + 1
                UR2 = UR2a
                If UR2a < UR2k Then UR2 = UR2k
                If Ws1.Range("A" & RR1).Value = Ws3.Range("A" & RR3).Value And Ws1.Range("K" & RR1).Value = Ws3.Range("A" & RR3).Value Then
                    Ws1.Rows(RR1 & ":" & RR1).Copy Destination:=WS2.Rows(UR2 & ":" & UR2)
                    WS2.Range("J" & UR2).Value = "OK"
                    RR1Ini = RR1 + 1
                    TR = 1
                    RR3 = RR3 + TR
                    GoTo saltaRR3
                End If
saltaD:
                If TR = 0 And Ws1.Range("A" & RR1).Value = Ws3.Range("A" & RR3).Value Then
                    If MVR = Ws1.Range("A" & RR1).Value Then DUR = 1
                    Ws1.Range("A" & RR1 & ":I" & RR1).Copy Destination:=WS2.Range("A" & UR2 - DUR)
                   ' WS2.Range("J" & UR2).Value = "DIVERSO"
                   MVR = Ws1.Range("A" & RR1).Value
                   DUR = 0
                    GoTo saltaRR1a
                End If
saltaRR1a:
                If TR = 0 And Ws1.Range("K" & RR1).Value = Ws3.Range("A" & RR3).Value Then
                    If MVR = Ws1.Range("K" & RR1).Value Then DUR = 1
                        Ws1.Range("J" & RR1 & ":Q" & RR1).Copy Destination:=WS2.Range("J" & UR2 - DUR)
                    ' WS2.Range("J" & UR2).Value = "DIVERSO"
                    MVR = Ws1.Range("K" & RR1).Value
                    DUR = 0
                    GoTo saltaRR1:
                End If
saltaRR1:
            Next RR1
saltaRR3:
    Next RR3
End Sub

Avvi la macro e troverai nel Foglio2 i dati con le righe allineate

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Macro allineamento celle Excel

Postdi amordigio » 02/10/13 14:41

Buon giorno, ripropongo lo stesso problema per l'allineamento. Purtroppo non ho pensato in un primo momento a crearmi in un file xls un campo id ed ora mi trovo a dover allineare due colonne infinite (1665 righe). La colonne a-b-c-d sono le colonne che devono rimanere ferme, la colonna D è la master mentre la colonna F è la slave. Nel riallineamento la colonna F deve trascinarsi dietro il contenuto delle celle G. Grazie per l'aiuto... se volete posso mandare il file xls allegato.
amordigio
Newbie
 
Post: 3
Iscritto il: 02/10/13 14:29

Re: Macro allineamento celle Excel

Postdi Flash30005 » 03/10/13 01:05

Ciao Amordigio e benvenuto nel Forum

si, è meglio avere il file con i riferimenti e indicazioni sullo stesso

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Macro allineamento celle Excel

Postdi amordigio » 03/10/13 07:26

Grazie. aggancio il link. Sono curioso di vedere la macro per imparare un pò...
http://www.mediafire.com/view/zqx8ynjvv ... rtel2.xlsx
amordigio
Newbie
 
Post: 3
Iscritto il: 02/10/13 14:29

Re: Macro allineamento celle Excel

Postdi Flash30005 » 03/10/13 08:15

Per il tuo quesito non occorre una macro ma è sufficiente una formula che inserirai in E2 (o altra colonna ma sempre riga 2)
Codice: Seleziona tutto
=SE(VAL.ERRORE(CERCA.VERT(D2;F$2:G$483;2;0))=VERO;"";CERCA.VERT(D2;F$2:G$483;2;0))

trascini fino all'ultima riga utile della colonna D

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Macro allineamento celle Excel

Postdi amordigio » 03/10/13 12:33

spettacolare... ma quante funzioni che non conosco.... GRAZIE!!
amordigio
Newbie
 
Post: 3
Iscritto il: 02/10/13 14:29


Torna a Applicazioni Office Windows


Topic correlati a "Macro allineamento celle Excel":


Chi c’è in linea

Visitano il forum: Ricky0185 e 58 ospiti