26. oktober 2005 - 15:57Der er
30 kommentarer og 1 løsning
sortering af rækker
I et regneark, har jeg et skema som fra gang til gang består af xx-antal rækker. Disse rækker er opdelt således, at en grupper starter med en tekst som begynder med et tal eks. 100 og er med fedskrift. I mellem disse linier forefindes der så xx-antal rækker, som ønskes sorteret på kolonne G (tal - største øverst).
Jeg vil tro at der kan strikkes en løsning sammen vhja. en if-sætning der beregner en klassificering pr. linie der efterfølgende kan sorteres på. Dog skal der formentlig efterfølgende laves copy/paste values inden sortering, plus der skal tages højde for at overskriften som udgangspunkt vil blive sorteret ned i bunden af gruppen hvis du sorterer højeste beløb øverst.
Dette vil formentlig kunnes løses med lidt VBA og måske en ekstra hjælpekolonne, men inden så ville jeg lige høre hvor mange data vi snakker om, så vi ikke laver total overkill på noget der kan klares med 5 manuelle sorteringer.
Det lyder interessant. Hvis overskriften (total linien) kommer nederst vil det også forbedre det en hel del. Skemaet består af 30 grupper nogen gange mindre andre gange flere.
Altså, Skemaet dækker kolonne A-V. Kolonne A = Tekst, Kolonne B-V = Tal. (Der skal sorteres efter kolonne V) Der Startes i Celle A5 med teksten 100 og sluttes i A? med teksten Total.
Det er sådan at efter 100 kommer det xx-antal linier med navne og på et tidspunkt kommer så teksten 200 osv.
Indsæt en ny kolonne A og kopier formel ind i A5. Træk ned til bunden af tabellen Copy/paste value på hele kolonne A Sorter på kolonne A primært og kolonne W (tidligere V) sekundært
Hvis det virker efter hensigten, skulle kolonne A giver dig en "overskrift" til hver linie. Det kræver at de 3 første karakterer i datalinierne ikke er tal.
Hvis det virker kan vi arbejde på at automatisere processen i VBA.
Kan vi gå ud fra at datalinier altid ligger mellem overskriftsliner, altså at mellem 100 og 200 overskrifterne er der kun linier der hedder noget med 1xx.xxx?
Når jeg indsætter en ny kolonne A. Indsætter formlen =HVIS(ER.FEJL(VÆRDI(VENSTRE(B4;2)));A4;VÆRDI(VENSTRE(B4;2))) og kopier denne nedad, står der 10 i alle rækker pånær de rækker hvor der er en ny gruppe starter, hvor der så står de 2 føreste cifre for den enkelte gruppe.
Altså: arket starter i B4 med teksten '100 grp.', i B20 kommer '180 grp.' og i B25 kommer '260 grp.' i celle A4-A19 står der '10', i Celle 'A20' står der '18', i celle A21-A24 står der '10' og i celle A25 står der '26' osv.
Jeg prøver at finde ud af hvorfor formlen i A21 returnerer værdien 10? Det burde den kun kunne gøre hvis der i B21 står fx. "101565 Jens Larsen". Fordi i celle B20 står der "180 grp. - Skruer og stumper", og formlen i celle A20 returnerer værdien "18" og eftersom formlen i A21 kun har 2 muligheder: - enten at returnere de første to karakterer i B21 hvis de er numeriske - eller at returnere værdien fra A20 som er 18 må det betyde at der i celle B21 står fx. "101565 Jens Larsen", og hvis der gør det fungerer formlen ikke, fordi den er baseret på at der skal stå de samme to cifre som i gruppeoverskriften.
Ok, det havde jeg fanget anderledes. Dvs. de 3 første cifre kan godt være det samme for f.eks. "100 grp." og "100637 - BE". Kan vi antage at alle overskrifter indeholder "grp." som karakter 5-8? Så kan vi foretage klassificeringen på baggrund af disse istedet. Hvis dette ikke er tilfældet, er du nødt til at fortælle mig hvordan overskrifterne adskiller sig fra datalinierne (Det skal være konsekvent hele vejen ned)
=HVIS(MIDT(B5;5;4)="grp.";VENSTRE(B5;2);A4)
Jeg tror det hedder MIDT på dansk men jeg ved det ikke?
Når jeg vælger sorter på kolonne A (stigende) med kolonne V (faldende), sorteres der godt nok, men total forbliver øverst da denne er størst (ikke vigtigt at det står nederst)
Jeg forsøger at strikke en VBA løsning sammen, men er løbet ind i lidt problemer (er ikke den største VBA haj), du må lige væbne dig med tålmod (læs: det bliver ikke idag)
Det der så mangler, er at finde sidste celle i kolonne A og kopier formlen ned af. Derefter at markere skemaet fra A5 til Q?? og sortere på A-stigende og Q-faldende.
Sidste celle i B indeholder teksten Total. Så det må være noget med - find teksten total i celle B? kopiere A5 til A6:A?, markere skema A5:Q?, sortere på kolonne A´-stigende og kolonne Q-faldende.
Ved at prøve mig frem med 'indspil macro' og se på andre macro'er som folk har lavet til mig, har jeg fået strikket nedenstående sammen og det giver mig det resultat jeg gerne vil have.
VBA haj :o) Jeg rodede med noget ActiveCell.CurrentArray.Select - men kunne ikke rigtig få det til at gøre som jeg ville. Så det er jo fint at du selv tog affære..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.