Avatar billede zall Nybegynder
13. august 2007 - 15:56 Der er 16 kommentarer og
1 løsning

Lav hold

Jeg skal inddele omkring 750 personer på 36 hold.

personerne står i et excel ark så:

a2=klasse b2=efternavn c2=fornavn

Der er 3 årgange og personerne skal blandes sammen så alle 3 årgange blandes, disse årgange kan ses i a, altså klasserne, hvor 1 årgangsklasser starter med 101, 102... 2 årgang 201, 202 osv..

Men hvordan gør man dette?
man kunne side og tage 2 personer fra hver klasse ind på hvert hold, men det kommer til at tage sin tid.
Avatar billede gider_ikke_mere Nybegynder
13. august 2007 - 17:12 #1
Prøv denne:

Sub test()
Dim Børn, I  As Long, Y As Long, S As Long
Slut = Range("A65536").End(xlUp).Row
Børn = Range("A3:C" & Slut)

For I = 1 To UBound(Børn)
    For Y = I To UBound(Børn) ' - 1
        If Børn(I, 1) > Børn(Y, 1) Then
            Temp1 = Børn(Y, 1)
            Temp2 = Børn(Y, 2)
            Temp3 = Børn(Y, 3)
            Børn(Y, 1) = Børn(I, 1)
            Børn(Y, 2) = Børn(I, 2)
            Børn(Y, 3) = Børn(I, 3)
            Børn(I, 1) = Temp1
            Børn(I, 2) = Temp2
            Børn(I, 3) = Temp3
        End If
    Next
Next

D = Round(UBound(Børn) / 36) + 1
Hold = Range("E3:AN" & D + 3)
I = 1
For L = 1 To UBound(Hold)
    For S = 1 To 36
        Hold(L, S) = "Klasse: " & Børn(I, 1) & " " & Børn(I, 2) & "," & Børn(I, 3)
        I = I + 1
        If I > UBound(Børn) Then
            GoTo SlutHer:
        End If
    Next
Next
SlutHer:
Range("E3:AN" & D + 3) = Hold
End Sub
Avatar billede gider_ikke_mere Nybegynder
13. august 2007 - 17:20 #2
Bemærk at der skrives tilbage i samme ark i kolonnerne E til AN!!
Avatar billede zall Nybegynder
13. august 2007 - 17:22 #3
Hey.

Ja..
Altså jeg kan godt finde ud af noget i excel, men lige det der har jeg aldrig set, har ikke den fjeneste ide hvad skal gøre med det. :-)

Så dette skal jeg også ha en hånd til ;-)
Avatar billede gider_ikke_mere Nybegynder
13. august 2007 - 17:45 #4
Start Excel. Åbn dit ark med hold. Tryk Alt+F11 - det starter VBA editoren.
Du har nu formentlig 3 vinduer.

I venstre side: Projekt - VBA Projekt og et der hedder noget med properties.
I højre side: et tomt gråt vindue.

Højreklik i vinduet "Projekt - VBA Projekt" og vælg "Insert Module": http://www.racingcar.dk/eksperten/billeder/zall1.jpg

Modul1 kommer nu til syne i højre side. Sæt koden derind: http://www.racingcar.dk/eksperten/billeder/zall2.jpg
Avatar billede gider_ikke_mere Nybegynder
13. august 2007 - 17:55 #5
Gå tilbage til Excel. Vælg Funktioner -> Makro -> Makroer: http://www.racingcar.dk/eksperten/billeder/zall3.jpg

Marker "test" og klik "Afspil":
http://www.racingcar.dk/eksperten/billeder/zall4.jpg
Avatar billede gider_ikke_mere Nybegynder
13. august 2007 - 17:59 #6
Det er blot en makro jeg har lavet. VBA står for Visual basic for Application. Du skal sætte makrosikkerheden til "mellem" for at kunne afspille makroen ved næste åbning. Det gøres under "Funktioner" -> "Makro" -> "Sikkerhed".
Avatar billede zall Nybegynder
14. august 2007 - 15:49 #7
Er det muligt at hvert hold tilpasses på arket, således at man trykker print og så printerne man holdene ud på hver sin side.?
Avatar billede zall Nybegynder
14. august 2007 - 15:56 #8
Glemte lige at spørge om den tager alle på arket med, altså jeg skrev at det var omkring 750 personer men der er lidt flere. En anden ting, du har skrevet i formlen Børn = Range("A3:C" & Slut) skal dette ikke være A2 da navnene starter i A2?
Avatar billede gider_ikke_mere Nybegynder
14. august 2007 - 16:10 #9
Den finder selv ud af hvor langt ned i arket der er skrevet i kolonne A med Slut = Range("A65536").End(xlUp).Row. Så hvis der står noget under alle navnene, skal der laves en ændring.
Hvis navnene står i A2 og ned (troede det var en celle med overskrift), skal du rette følgende:

.. nej vent lidt, jeg laver lige en ændring:

Sub test2()
Dim Børn, I  As Long, Y As Long, S As Long
Slut = Range("A65536").End(xlUp).Row
Række = "A3"
Børn = Range(Række & ":C" & Slut)
ArkOffset = Range(Række).Row

For I = 1 To UBound(Børn)
    For Y = I To UBound(Børn) ' - 1
        If Børn(I, 1) > Børn(Y, 1) Then
            Temp1 = Børn(Y, 1)
            Temp2 = Børn(Y, 2)
            Temp3 = Børn(Y, 3)
            Børn(Y, 1) = Børn(I, 1)
            Børn(Y, 2) = Børn(I, 2)
            Børn(Y, 3) = Børn(I, 3)
            Børn(I, 1) = Temp1
            Børn(I, 2) = Temp2
            Børn(I, 3) = Temp3
        End If
    Next
Next

D = Round(UBound(Børn) / 36) + 1
Hold = Range("E3:AN" & D + ArkOffset)
I = 1
For L = 1 To UBound(Hold)
    For S = 1 To 36
        Hold(L, S) = "Klasse: " & Børn(I, 1) & " " & Børn(I, 2) & "," & Børn(I, 3)
        I = I + 1
        If I > UBound(Børn) Then
            GoTo SlutHer:
        End If
    Next
Next
SlutHer:
Range("E3:AN" & D + ArkOffset) = Hold
End Sub

Så skal du blot rette i
Række = "A3" til Række = "A2"
hvis du skal flytte listen.
Avatar billede zall Nybegynder
14. august 2007 - 16:19 #10
Jeg ved ikke om du ikke så denne: Er det muligt at hvert hold tilpasses på arket, således at man trykker print og så printerne man holdene ud på hver sin side.?
Avatar billede gider_ikke_mere Nybegynder
14. august 2007 - 17:04 #11
Hvis du skal styre hvorledes printet skal se ud, er det nemmest at kopiere hvert hold til et ark. Det kan jeg lave til dig kodemæssigt.
Avatar billede gider_ikke_mere Nybegynder
14. august 2007 - 17:09 #12
Alternativt kan du blot markere hvert hold, og udskrive markeringen.
Avatar billede zall Nybegynder
14. august 2007 - 17:14 #13
Okay, bruger bare den sidste løsning.

Lige et par spørgsmål mere hvordan tildeler jeg dig de pointm og hvor har du lært at programmere i det sprog?
Avatar billede gider_ikke_mere Nybegynder
14. august 2007 - 18:30 #14
Det er selvlært. jeg har arbejdet i et projekt i 3 år med et avanceret Excel ark, hvor jeg efterhånden lærte mig selv mere og mere. Jeg købte en bog til formålet, men brugte den ikke ret meget, da jeg kunne det meste der stod i den.

Dette indlæg er lagt som et svar - betingelsen for at du kan give point til den du ønsker at tildele disse. Du markerer den lille boks med mit navn der dermed er kommet nederst på denne side, og klikker "Accepter": http://www.racingcar.dk/eksperten/svar/svar.html

Hvad er det for en skole? 750+ elever i 3 årgange er en ordentlig størrelse.
Avatar billede gider_ikke_mere Nybegynder
14. august 2007 - 18:32 #15
Avatar billede zall Nybegynder
14. august 2007 - 18:53 #16
Der er da en del bøger om dette emne. Vil jeg lige kigge på.
Jeg har også siddet og rodet med det, men det er mere på formel stadiet, dette ser noget mere avanceret ud.

Det er HH i Odense, vi har en sportsdag her inde længe hvor skolen blandes på alle årgange.

Mange tak for hjælpen
Avatar billede gider_ikke_mere Nybegynder
14. august 2007 - 19:24 #17
Velbekomme. Så må vi håbe der ikke er nogen der bliver råbt op to gange ;-)
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