Avatar billede mainframe Nybegynder
03. september 2011 - 22:11 Der er 9 kommentarer og
1 løsning

sortere navne udfra krydser og skrive dem på listeform

Hej Eksperter
Jeg har en liste med navne på elever i forskellige klasser, som skal sorteres i grupper. Det ser sådan ud:

gruppe1  gruppe2  gruppe3  navne  klasse
x                            Allan    1.kl
              x              Bertram  1.kl
x                            Hjalte    1.kl
x                            Julie    1.kl
etc...

Navnene skal sorteres og skrives på listeform i en særskildt fane til hver gruppe.
udfra krydserne skal den gerne finde ud af hvem der skal hvor.

er det muligt i excel.

MVH
Allan
Avatar billede supertekst Ekspert
03. september 2011 - 23:22 #1
Ja - det skulle nok være muligt..

Hvor mange data skal med på de enkelte ark?
Avatar billede supertekst Ekspert
03. september 2011 - 23:58 #2
Rem Kode anbringes under Ark1
rem De 3 næste ark omdøbes til "gruppe1", "gruppe2" og "gruppe3"

Dim antalRæk As Long, ræk As Long
Dim navn As String, klasse As String
Dim arkNavn As String, ræk1 As Long, ræk2 As Long, ræk3 As Long
Dim kryds As Byte
Public Sub sorterElever()
    Application.ScreenUpdating = False
   
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
    ræk1 = 0
    ræk2 = 0
    ræk3 = 0
   
    For ræk = 2 To antalRæk
        række = findKrydsOgRække(ræk)
        placerElev arkNavn, Range("D" & ræk), Range("E" & ræk), række
    Next ræk
   
    Application.ScreenUpdating = True
End Sub
Private Function findKrydsOgRække(ræk)
    If LCase(Range("A" & ræk)) = "x" Then
        arkNavn = Cells(1, 1)
        ræk1 = ræk1 + 1
        findKrydsOgRække = ræk1
    Else
        If LCase(Range("B" & ræk)) = "x" Then
            arkNavn = Cells(1, 2)
            ræk2 = ræk2 + 1
            findKrydsOgRække = ræk2
        Else
            findKryds = 3
            arkNavn = Cells(1, 3)
            ræk3 = ræk3 + 1
            findKrydsOgRække = ræk3
        End If
    End If
End Function
Private Sub placerElev(arkNavn, navn, klasse, række)
    Sheets(arkNavn).Activate
    ActiveSheet.Range("A" & række) = navn
    ActiveSheet.Range("B" & række) = klasse
    række = rækk + 1
    Sheets("Ark1").Activate
End Sub
Avatar billede store-morten Ekspert
04. september 2011 - 00:28 #3
Manuelt:
marker overskrifter, gruppe1  gruppe2  gruppe3  navne  klasse
Vælg 'Data' --> 'Filter' --> 'Autofilter'

Filtrer gruppe1 --> vælg "x" --> Kopier kolonne D(navne) og E(klasse)
på ark2 højreklik i celle A1 --> 'Sæt ind'
Tilbage til listen, klik på gruppe1, Filtrer gruppe1 --> vælg "alle"

Filtrer gruppe2 --> vælg "x"--> Kopier kolonne D(navne) og E(klasse)
på ark3 højreklik i celle A1 --> 'Sæt ind'
Tilbage til listen, klik på gruppe2, Filtrer gruppe2 --> vælg "alle"

Filtrer gruppe3 --> vælg "x" --> Kopier kolonne D(navne) og E(klasse)
på ark4 højreklik i celle A1 --> 'Sæt ind'
Tilbage til listen, klik på gruppe3, Filtrer gruppe1 --> vælg "alle"
Avatar billede mainframe Nybegynder
04. september 2011 - 21:34 #4
Hej, tak for forslaget. Jeg har klistret koden ind i ark1 og omdøbt de næste 3 ark til gruppe1, gruppe2 og gruppe3, men når jeg kører koden siger den, "subscript out of range".
hvad gør jeg mon forkert

Hilsen Allan
Avatar billede supertekst Ekspert
04. september 2011 - 23:08 #5
Prøv at checke "Gruppeoverskrifterne" og arknavnene er de ens?
Avatar billede mainframe Nybegynder
05. september 2011 - 14:19 #6
de er ens.
Mhh, så jeg ved ikke lige....
Avatar billede supertekst Ekspert
05. september 2011 - 14:32 #7
Ok - du er velkommen til at sende filen til. @-adresse under min profil.
Avatar billede supertekst Ekspert
05. september 2011 - 23:55 #8
Rem "Version 2"
Dim antalRæk As Long, ræk As Long
Dim navn As String, klasse As String
Dim arkNavn As String, rækkeTabel(8) As Integer
Dim kryds As Byte
Public Sub sorterElever()
    Application.ScreenUpdating = False
   
    nulstilTabel
   
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
    For ræk = 3 To antalRæk                        'START I RÆKKE 3
        række = findKrydsOgRække(ræk)
        If række > 0 Then
            placerElev arkNavn, Range("I" & ræk), Range("J" & ræk), række
        End If
    Next ræk
   
    Application.ScreenUpdating = True
    MsgBox "Sortering afsluttet"
End Sub
Private Sub nulstilTabel()
Dim k As Byte
    For k = 0 To 8
        rækkeTabel(k) = 1
    Next k
End Sub
Private Function findKrydsOgRække(ræk)
Dim k As Byte
    For k = 1 To 8
        If Cells(ræk, k) = "x" Then
            arkNavn = "GR" & CStr(k)
            rækkeTabel(k) = rækkeTabel(k) + 1
            findKrydsOgRække = rækkeTabel(k)
            Exit Function
        End If
    Next k
    findKrydsOgRække = 0
End Function
Private Sub placerElev(arkNavn, navn, klasse, række)
    Sheets(arkNavn).Activate
    ActiveSheet.Range("A" & række) = navn
    ActiveSheet.Range("B" & række) = klasse
    ActiveSheet.Columns.AutoFit
   
    Sheets("Ark1").Activate
End Sub
Avatar billede mainframe Nybegynder
06. september 2011 - 20:03 #9
Takker.
Det er helt perfekt...
Avatar billede supertekst Ekspert
06. september 2011 - 20:45 #10
Selv tak..
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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