Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketSortering af liste

 Besvar Besvar
Forfatter
zpjj Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 08.Maj.2013
Land: Danmark
Status: Offline
Point: 179
Direkte link til dette indlæg Emne: Sortering af liste
    Sendt: 12.Jul.2015 kl. 15:47
Hej
 
Jeg sidder og bokser med et problem, mht. sortering af filnavne i en userform listbox.
Jeg har vedhæftet et ark med 1 colonne hvordan filerne bliver listet i boksen, og 1 colonne med hvordan jeg gerne vil have dem repræsenteret i min listbox.
Håber på at der er en i forum'et som har en fiks lille macro stump, som jeg kan bruge.
 
Jeg har prøvet følgende kode:
    ''Sorts ListBox List
     Dim x1 As Long
     Dim y As Long
     Dim temp As Variant
        
     With ListBox1
         For y = 0 To ListBox1.ListCount - 2
             For x1 = 0 To ListBox1.ListCount - 2
                 If .List(x1) > .List(x1 + 1) Then
                     temp = .List(x1)
                     .List(x1) = .List(x1 + 1)
                     .List(x1 + 1) = temp
                  
                 End If
             Next x1
         Next y
     End With
 
Den virker også, men den giver mig ikke det ønskede resultat.
Ønsket resultat er at der skal sorteres efter nummer selvom der er flere af samme nummer.
 
Afspærring nr PJJ7558 XXCCXX.xlsm
Afspærring nr GD7557 DDDD.xlsm
Afspærring nr GM7557 EERR.xlsm
Afspærring nr GP7557 SSS.xlsm
Afspærring nr PJJ7557 PJJTEST1.xlsm
Afspærring nr PJJ7556 PÅASD.xlsm
 
Dette skal bruges i en større sammenhæng og det vil være forvirrende at oploade det hele.
 
Håber at der er nogen her som kan hjælpe mig på vej.
Med venlig hilsen
Peter J
 
/uploads/856/Sortering_liste.xlsx" rel="nofollow">uploads/856/Sortering_liste.xlsx
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010
Til top



Til top
thomasbk Se dropdown
Bronze bruger
Bronze bruger


Medlem: 19.Jul.2015
Land: Danmark
Status: Offline
Point: 85
Direkte link til dette indlæg Sendt: 19.Jul.2015 kl. 16:01
Jeg kender ikke rækkefølgen i din "arbejdsgang", men umiddelbart vil jeg foreslå dig at bruge Excels indbyggede sorteringsfunktion til at sortere listen i stedet for at skrive en VBA rutine til det. Det er givetvis også hurtigst for Excel at gøre det på den måde.

Til top
zpjj Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 08.Maj.2013
Land: Danmark
Status: Offline
Point: 179
Direkte link til dette indlæg Sendt: 19.Jul.2015 kl. 21:38
Tak for svaret thomasbk
 
Det ville jeg også gerne, men det giver ikke det ønskede resultat.
Den skal sortere efter det nummer som står efter den første tekst.
Dvs. at den skal se bort fra teksten før nummeret. Smile
 
Forstår godt dit svar, men jeg bruger det til at sortere fill navne i en Userform. 
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010
Til top
thomasbk Se dropdown
Bronze bruger
Bronze bruger


Medlem: 19.Jul.2015
Land: Danmark
Status: Offline
Point: 85
Direkte link til dette indlæg Sendt: 19.Jul.2015 kl. 22:40
Hej igen

Kan jeg bede dig fortælle præcist hvilken del af den samlede tekst der skal sorteres efter.
Til top
zpjj Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 08.Maj.2013
Land: Danmark
Status: Offline
Point: 179
Direkte link til dette indlæg Sendt: 20.Jul.2015 kl. 06:16
Hej igen
Listen skulle gerne se sådan ud, når den er sorteret.
Det er de røde tal, der skal sorteres efter.
Ved ens tal, er rækkefølgen underordnet.
 
Afspærring nr GM7561 SSSS.xlsm
Afspærring nr GM7560 FDFDE.xlsm
Afspærring nr PJJ7559 444444.xlsm
Afspærring nr PJJ7558 XXCCXX.xlsm
Afspærring nr GD7557 DDDD.xlsm
Afspærring nr GM7557 EERR.xlsm
Afspærring nr GP7557 SSS.xlsm
Afspærring nr PJJ7557 PJJTEST1.xlsm
Afspærring nr PJJ7556 PÅASD.xlsm
Afspærring nr PJJ7555 X123.xlsm
Afspærring nr PJJ7554 TESTQQ.xlsm
Afspærring nr GP7553 DDDD.xlsm
Håber du forstår, hvad jeg mener Smile
Mvh.
Peter Juul
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010
Til top
thomasbk Se dropdown
Bronze bruger
Bronze bruger


Medlem: 19.Jul.2015
Land: Danmark
Status: Offline
Point: 85
Direkte link til dette indlæg Sendt: 20.Jul.2015 kl. 08:35
Hej

Det er en spændende omend en smule utaknemlig opgave du har der :-)

Visualt ser jeg følgende system i din opstilling og det du skal sortere efter:
1. De fire cifre til venstre for det sidste mellemrum i filnavnet.
2. Det første tal plus de næste tre cifre i filnavnet.
3. De første fire cifre i filnavnet der er numerisk.

Kan disse forudsætninger tages for gældende?
Vil de altid være gældende eller kan der eksempelvis pludseligt være fem cifre i tallet der skal sorteres på? 
Disse forudsætninger synes jeg du skal være meget opmærksom på.

Det vil være super hvis har indflydelse på filnavnets dannelse. Eksempelvis vil det være noget mere sikkert at søge efter noget der står mellem mellemrum 3 og 4.

Har du eventuelt mulighed for at løse opgaven i en større sammehæng end denne hvor udgangspunktet er indholdet af en userform??

Jeg er ikke klar over hvor stærk du er i VBA, jeg selv er ikke særlig fortrolig med userforms og listbox.
Hvis du kan få indholdet af listboxen ud i en streng i stedet, så vil jeg foreslår at du indføje noget kode ala nedenstående for hvert loop du udfører:

Sub sortfiles()

Dim strfilename As String

strfilename = "Afspærring nr PJJ7558 XXCCXX.xlsm"

MsgBox Mid(strfilename, InStrRev(strfilename, " ", -1) - 4, 4)

End Sub

Ovenstående er bare et eksempel. Instrrev funktionen finder placeringen af det første mellemrum fra højre i filnavnet. Herefter trækkes fire fra. Til sidst bruges Mid funktionen med udgangspunkt i førnævnte til at trække de fire tal ud med.
Når du har tallene kan du sortere på dem i stedet for hele listboxens indhold.

Jeg håber det kan bruges.
Men som nævnt, overvej om forudsætningerne er til stede for en løsning ala ovenstående.
Til top
zpjj Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 08.Maj.2013
Land: Danmark
Status: Offline
Point: 179
Direkte link til dette indlæg Sendt: 20.Jul.2015 kl. 12:53
Hej thomasbk
 
Jeg tror, at jeg har fundet løsningen på mit problem. Smile
Du bragte mig på sporet, og jeg kom i tanke om en program stump, som jeg også har fået herinde i forumet.
Den er ikke afhængig af antallet af ciffer i tallet.
 
Sub FindFørsteNummer()
Dim strfilename As String
Dim xx As String
Dim sTmp As Variant
Dim i As Integer
    
     strfilename = "Afspærring nr PJJ75582 XXCCXX.xlsm"
     sTmp = Split(strfilename, " ")
     For i = 1 To Len(sTmp(2))
          If IsNumeric(Mid(sTmp(2), i, 1)) Then xx = xx & Mid(sTmp(2), i, 1)
     Next i
End Sub
 
Så smider jeg hele listen over i et "sheet" og masker tallet ud i en col. for sig selv og laver sorteringen der.
 
Hvis jeg får det til at virke, smider jeg det ind her igen.
Du må gerne komme med flere input, da det er gode hints, du er kommet med.
 
Mvh.
Peter Juul
 
 
 
 
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010
Til top
zpjj Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 08.Maj.2013
Land: Danmark
Status: Offline
Point: 179
Direkte link til dette indlæg Sendt: 20.Jul.2015 kl. 21:45
Hej thomasbk
Jeg har fundet løsningen på mit problem Smile
 
Du har været en stor hjælp Clap
 
Jeg vedhæfter lige min løsning.
Den kunne nok laves lidt mere fikst, men den virker.
 
Mvh.
Peter Juul
 
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010
Til top
thomasbk Se dropdown
Bronze bruger
Bronze bruger


Medlem: 19.Jul.2015
Land: Danmark
Status: Offline
Point: 85
Direkte link til dette indlæg Sendt: 21.Jul.2015 kl. 07:46
Hej

Super godt du fandt en løsning.

Du må meget gerne indsætte din endelige makrotekst her i tråden.
Af sikkerhedsmæssige årsager afholder jeg mig altid fra at åbne filer med makroer jeg ikke kender.

Mvh
Thomas
Til top
zpjj Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 08.Maj.2013
Land: Danmark
Status: Offline
Point: 179
Direkte link til dette indlæg Sendt: 21.Jul.2015 kl. 08:18
Hej Thomas
 
Hermed Macro som tekst, og jeg har vedhæftet arket uden macro, så kan du selv sætte macroen ind, når du har set den igennem og teste det.
 
Private Sub CommandButton21_Click()
Dim fileName As String, i As Integer, j As Integer, f As Integer
Dim xx As String
Dim sTmp As Variant
Dim c As Range
Application.ScreenUpdating = False
  
    For Each c In Range("A1", Range("A1").End(xlDown))
        j = j + 1
        Range(c.Address).Copy Destination:=Worksheets("Ark1").Cells(j, 4)
    Next c
fileName = Worksheets("Ark1").Cells(1, 4)
    Do While fileName <> ""
        i = i + 1
            fileName = Worksheets("Ark1").Cells(i, 4)
        If fileName = "" Then
            GoTo 11
        End If
     sTmp = Split(fileName, " ")
     For f = 1 To Len(sTmp(2))
          If IsNumeric(Mid(sTmp(2), f, 1)) Then xx = xx & Mid(sTmp(2), f, 1)
     Next f
    
     Ark1.Cells(i, 3) = xx
     xx = ""
11
    Loop
  
   
lastrow = Ark1.Cells(Rows.Count, 3).End(xlUp).Row
    If Ark1.Range("C1") <> "" Then
        Sheets("Ark1").Range("C1:D" & lastrow).Sort key1:=Sheets("Ark1").Range("C1:C" & lastrow), order1:=xlDescending, Header:=xlNo
    End If
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton22_Click()
Dim lastrow As Long
lastrow = Ark1.Cells(Rows.Count, 3).End(xlUp).Row
Sheets("Ark1").Range("C1:D" & lastrow).Clear
End Sub
 
Mvh.
Peter Juul
 
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk