Ciao a tutti,
col permesso di Alexsandra
sottopongo la mia interpretazione.
Per ottenere quanto descritto mi sembra utile il seguente codice:
- Codice: Seleziona tutto
Dim CDoc, OldDoc, CSer, OldSer, FoglioDati, FoglioOut
Sub Bart1960()
FoglioDati = "Foglio1"
FoglioOut = "Foglio2"
'Ordina per Serie e per doc
Sheets(FoglioDati).Select
Columns("A:B").Select
'Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
Range("A1").Select
LastRow = Range("A65536").End(xlUp).Row
Sheets(FoglioOut).Select
'Azzera
Cells.Select
Selection.ClearContents
'Intesta le colonne di summary
Range("A1").Value = "Serie"
Range("B1").Value = "From"
Range("C1").Value = "to"
'Cerca su FoglioDati e compila FoglioOut
For I = 1 To LastRow
Sheets(FoglioDati).Select
Range("A1").Offset(I, 0).Select
CSer = ActiveCell.Value
CDoc = ActiveCell.Offset(0, 1).Value
If CSer <> OldSer Then
Call NewLine
GoTo Nexti
End If
If CDoc <> OldDoc + 1 Then Call NewLine
Nexti:
OldDoc = CDoc
Next I
End Sub
Sub NewLine()
Sheets(FoglioOut).Select
If OldDoc <> "" Then Range("C65536").End(xlUp).Offset(1, 0).Value = OldDoc
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = CSer
ActiveCell.Offset(0, 1).Value = CDoc
OldDoc = CDoc
OldSer = CSer
End Sub
SE INVECE VUOI OTTENERE quest' altro risultato, bisogna togliere l' apice in testa all' istruzione Selection.Sort Key1:=Range("A2"),etc etc In questo modo i dati prima di essere elaborati vengono ordinati per Serie e per Numero Doc.
Serie- From- to
120---- 1------ 4
120---- 6------ 6
128---- 1------ 2
128---- 4------ 4
128---- 6------ 6
Istruzioni:
Incollare tutto il codice sul foglio Modulo1 del vba
-apri vba editor (Alt-F11); se nel frame "Progetto" a sx esiste la cartelletta Moduli, cliccare per aprire Modulo1; se non esiste: Menu ->Inserisci ->Modulo
-copia il codice e incollalo sul frame a destra
-assegnare un tasto di scelta rapida (da excel: Menu ->Strumenti ->Macro ->Macro; seleziona la macro bart1960 e premere Opzioni; impostare un tasto alla macro, es S (maiuscolo) come summary. Oppure disegnare un pulsante (dalla barra degli strumenti "Moduli") e assegnargli la macro.
Uso:
-modificare se necessario le impostazioni iniziali (FoglioDati = "Foglio1" e FoglioOut = "Foglio2")
-eventualmente modificare le intestazioni del foglio di uscita modificando le 3 istruzioni che seguono il commento "Intesta le colonne di summary"
-la macro richiede che i dati siano in colonna A (serie) e B (numero documento); altrimenti va adattata.
-attivando la macro (tasto di scelta rapida, o pulsante, o da vba editor), i dati di Foglio1 (o quanto specificato in FoglioDati) vengono letti e un summary viene creato in Foglio2 (FoglioOut).
Bart, prova e facci sapere; se necessario si puo' migliorare per rendere parametrizzabile l' area di FoglioDati.
Ciao,