Leírás a makróhoz.
Az sz=Worksheets.Count - 1 sorban az sz változóban megadtam a füzet lapjai száma mínusz 1 értéket (az utolsó lap az összegző oldal, azt nem vesszük bele).
A For lap...Next ciklus végigsétál az egyes lapokon. Rááll az aktuális lapra, ott is az A1 cellára. Kijelöli A1-től az alsó, értéket tartalmazó sorig [Range(Selection, Selection.End(xlDown)).Select], másolja, és a füzet utolsó lapjára, ott is az A oszlopának sor-adik cellájára beilleszti
[Selection.Copy Sheets(Worksheets.Count).Range("A" & sor)].
A sor változó az első esetben 1, ezt a ciklus előtt adtam meg. Beillesztés után a sor változó értékét a
sor = Sheets(Worksheets.Count).Range("A60000").End(xlUp).Row + 1-gyel meváltoztatom az összesítő lap első üres sorának értékére, hogy a következő lap értékeit az előzőek alá tegye be.
A ciklus végén az összesítőn minden lap A oszlopának az adata szerepel, egyes értékek többször is.
A következő 'egységgel' Ráállok az utolsó lapra: Sheets(Worksheets.Count).Select, és rendezem az adatokat emelkedő sorrendbe.
Kikeresem az alsó sort: usor = Range("A1").End(xlDown).Row.
A B1:Busor tartományba beírom a DARABTELI (COUNTIF) függvényt
[Range("B1:B" & usor) = "=countif(A:A,A1)"], ami az A oszlop cellái mellé beírja, melyik értékből hány darab van.
Másolom, és értékként saját magára beillesztem a B oszlop képleteit. Erre azért van szükség, mert mikor a következő For sor...Next ciklusban kitöröltetem az azonos értékeket, a függvény mindenhova 1-et írna, ha még mindig az szerepelne a cellákban.
A makró elején és végén lévő Application.ScreenUpdating a képernyőfrissítés letiltását, ill. engedélyezését határozza meg, arra jó, hogy egyrész ne villogjon a képernyő a lapok váltásakor, másrészt lerövidíti a futásidőt.