Avatar billede s_kjaer Praktikant
03. september 2004 - 20:59 Der er 24 kommentarer og
1 løsning

Sortere data til mange ark

Hej.

Jeg har et problem med et regneark til planlægning af timer på arbejde. Regnearket består af ca 60 kolonner og 700 rækker, og disse data skal så sorteres ud på de næste ark i regnearket efter den opgaveansvarlige, så hver ansvarlig kun skal gennemgå et ark med planlægning.
Indtil videre har jeg klaret på dogme metoden med hvis formler, med da der kommer ca. 20 ark ialt med hver 60*70 formler, er det noget tungt at arbejde med, og jeg har faktisk været nodt til at slå automatisk genberegning fra, når jeg sorterer i hovedarket.

Findes der ikke en smartere måde at lave det på?


Hvis jeg får lidt hjælp, skulle det være muligt for mig at få en macro til at virke ;-)

Søren
Avatar billede kabbak Professor
03. september 2004 - 21:38 #1
Hvad hedder dit Data ark, og i hvilken kolonne er oplysninger om opgaveansvarlige. ?
Avatar billede s_kjaer Praktikant
03. september 2004 - 21:42 #2
Data arket hedder "samlet". Jeg kan ikke lige huske hvad kolonne det er i, men logger lige på arb. og har svaret om 2 minutter.

SK
Avatar billede s_kjaer Praktikant
03. september 2004 - 21:46 #3
Den ansvarlige er i kolonne D.
Avatar billede kabbak Professor
03. september 2004 - 21:47 #4
Hvis den opgaveansvarliges ark hedder det samme, som det der skal findes i Arket("Samlet"), er det forholdsvis nemt.
Avatar billede s_kjaer Praktikant
03. september 2004 - 21:50 #5
Den ansvarlige vist ved initialer på 2 eller 3 tegn, og output arket har de samme initialer.
Jeg er ikke i tvivl om at det er nemt for dig, men det er pænt svært for mig lige nu....
Avatar billede kabbak Professor
03. september 2004 - 22:02 #6
Denne skal sættes i et Modul.


Public Sub CopyRækker(Ark As String)
Dim RW As Integer
RW = Worksheets(Ark).Range("A65536").End(xlUp).Row
  Worksheets(Ark).Rows("2:" & RW).ClearContents ' tømmer den opgaveansvarliges ark
X = 2
RW = Worksheets("samlet").Range("A65536").End(xlUp).Row
For i = 2 To RW
If Worksheets("samlet").Range("D" & i) = Ark Then
Worksheets("samlet").Rows(i & ":" & i).Copy
Sheets(Ark).Paste Destination:=Worksheets(Ark).Cells(X, 1)
X = X + 1
  End If
Next
End Sub

Denne skal i arkmodulet for hver ansvarlig

Private Sub Worksheet_Activate()
CopyRækker (ActiveSheet.Name)
End Sub
Avatar billede kabbak Professor
03. september 2004 - 22:06 #7
Der er plads til overskrifter i de ansvarliges ark, de vil ikke blive slettet ved opdatering.

Opdateringen sker automatisk, når man kommer fra et andet ark og går ind på den ansvarliges ark, det sørger den lille kode for.
Avatar billede s_kjaer Praktikant
03. september 2004 - 22:10 #8
Når du skriver at de skal indsættes i et modul, hvor er det så lige du mener?
Avatar billede kabbak Professor
03. september 2004 - 22:12 #9
den store kode skal være i et modul, ikke i arkmodulet,
Når du højreklikker på fanen af et ark og vælg vis programkode
Kan du i venstre side se dine arknavne.

Oppe i menulinien vælger du
Insert > module

Nu kan du se ovre under arkene til venstre står Module1.

Se nu er Module1 makeret med grå baggrund, det er her den store kode skal være
Avatar billede kabbak Professor
03. september 2004 - 22:15 #10
dobbeltklik nu på hver af de opgaveansvarliges ark  navne, så det bliver med grå baggrund, her skal den lille kode være, i dem alle

Pas på du må ikke sætte den i arket samlet
Avatar billede kabbak Professor
03. september 2004 - 22:18 #11
Det den store kode gør at finde initialerne i kolonne D og så kopier hele rækken over i deres ark.

Så initialerne og navnet på deres ark skal være ens
Avatar billede s_kjaer Praktikant
03. september 2004 - 22:18 #12
Så skulle det være på plads, og den fører tallene om til de rigtige ark. Der er lige en vigtig ting jeg glemte at skrive. De første 4 linier er overskrifter, og skal bare være ens på alle ark.
Avatar billede kabbak Professor
03. september 2004 - 22:19 #13
der hvor der står X = 2 retter du til X = 5

og denne
Worksheets(Ark).Rows("2:" & RW).ClearContents ' tømmer den opgaveansvarliges ark
rettes til

Worksheets(Ark).Rows("5:" & RW).ClearContents ' tømmer den opgaveansvarliges ark
Avatar billede kabbak Professor
03. september 2004 - 22:20 #14
Så skal du lige selv sætte de 4 øverste rækker ind manuelt
Avatar billede kabbak Professor
03. september 2004 - 22:24 #15
Lige en ting, koden tæller i kolonne A på arket samlet, så der skal være data i den sidste række,i kolonne A, for at det funker.
Avatar billede s_kjaer Praktikant
03. september 2004 - 22:33 #16
Så er det gjort, og det virker næsten perfekt. Det macroen sætter ind bliver i skrift størrelse 10, mens alt det andet er i 8.

Nu vil jeg til at lege med at sortet data i kolonerne, så det kan være at jeg opretter et spm. om det senere.

Smider du et svar?
Avatar billede kabbak Professor
03. september 2004 - 22:38 #17
hvis det er størrelse 8 på arket samlet, vil det også være 8 på den ansvarliges ark
Avatar billede kabbak Professor
03. september 2004 - 22:41 #18
Er hastigheden blevet bedre. ?

Vær opmærksom på at de ansvarliges ark, bliver opdateret hver geng du går ind på deres ark, så sorteringen skal kobles på opdateringen, for at det virker ok.
Avatar billede s_kjaer Praktikant
03. september 2004 - 22:46 #19
Så er størrelsen 8 på hele samlet arket. Der var nogle rækker nederst, hvor størrelsen var 10.

Den er blevet noget hurtigere at arbejde med, og nu fylder den kun 1/10 af tidligere.

Kan jeg forresten lige få dig til kort at forklare hvad de enkelte dele af koden gør, da jeg meget gerne vil lære at lave macroer.
Avatar billede kabbak Professor
03. september 2004 - 22:52 #20
Public Sub CopyRækker(Ark As String)
Dim RW As Integer
RW = Worksheets(Ark).Range("A65536").End(xlUp).Row ' finder sidste række på den opgaveansvarliges ark

  Worksheets(Ark).Rows("5:" & RW).ClearContents ' tømmer den opgaveansvarliges ark
X = 5 ' første række den skriver i på den opgaveansvarliges ark

RW = Worksheets("samlet").Range("A65536").End(xlUp).Row ' finder sidste brugte række i arket samlet
For i = 2 To RW' begynder at læse fra række 2, da der som regl er en overskrift
If Worksheets("samlet").Range("D" & i) = Ark Then' finder opgaveansvarliges  initialer
Worksheets("samlet").Rows(i & ":" & i).Copy' kopierer rækken hvis den skal
Sheets(Ark).Paste Destination:=Worksheets(Ark).Cells(X, 1), sætter den ind på næste række i den opgaveansvarliges ark

X = X + 1' lægger 1 til rækken
  End If
Next ' leder videre efter den næste der skal kopieres
End Sub
Avatar billede kabbak Professor
03. september 2004 - 22:53 #21
Og tak for point. ;-))
Avatar billede s_kjaer Praktikant
03. september 2004 - 22:55 #22
Tak for det.

Hvordan mener du at det er bedst at lære at lave macroer? Ved at sidde og bøvle med det, eller skal jeg på et kursus for at lære de grundlæggende ting ordentligt? Arb. har "pålagt" mig at lære at lave macroer, så jeg skal ikke selv betale omkostnignerne.
Avatar billede kabbak Professor
03. september 2004 - 22:59 #23
Sæt din makro til at optage en makro, lav nogle enkelte handlinger, stop den og se hvad den skriver, ret i det for at se om det stadig virker, ved at køre makroen, lær af det.

Gør dem sværer og sværer.

Og følg med på eksperten, både i Excel og Visual basic VB6, de er meget ens.
Avatar billede s_kjaer Praktikant
03. september 2004 - 23:02 #24
Ok, jeg prøver at lege med det. Jeg har ikke brugt macro optageren ret meget, men det kunne da godt ske at jeg også skulle se lidt på den.

Jeg har søgt en del her på eksperten, og har også lært lidt af det, selv om det er svært at følge med nogle gange, når man ikke har det grundlæggende på plads.

Endnu en gang tak for hjælpen.
Avatar billede kabbak Professor
03. september 2004 - 23:06 #25
Gør som mig, Lav et Excel ark, Kald den Makrokoder, find spændende makroer, måske her på eksperten, kopier dem ind på cellerne i et ark, husk indsæt specielt og vælg tekst.

Kopier også linket til spørgsmålet ind i en celle ved siden af, så kan du altid se forklaringen.

Engang når du får tid, leg med makroerne ved at sætte dem ind i modulet, og se hvad de kan.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester