28. januar 2008 - 11:13Der er
20 kommentarer og 1 løsning
sorter x-antal linier
Jeg har et ark på xx-antal linier i kolonne B indeholder nogle celler teksten grp. (er fed) Det jeg ønsker, at xx-linier mellem de celler som indeholder teksten grp. bliver sorteret faldende efter kolonne P.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Sub SpecialSort() Application.ScreenUpdating = False Dim x() Sheets("Ark1").Select rk = Cells(1000, "B").End(xlUp).Row ReDim x(rk) For t = 1 To rk If Cells(t, "B") Like "grp*" Then x(t) = Cells(t, "P").Formula: Cells(t, "P") = "" Next On Error Resume Next For t = 1 To rk If Cells(t, "B") <> "" And Cells(t, "B") <> "grp*" And Cells(t, "P") <> "" Then rng = Range("A" & t & ":IV" & t) maxtal = Application.WorksheetFunction.Max(Range("P" & t & ":P" & rk)) maxrk = Range("P" & t & ":P" & rk).Find(maxtal, LookIn:=xlValues).Row Range("A" & maxrk & ":IV" & maxrk).Copy Range("A" & t & ":IV" & t) Range("A" & maxrk & ":IV" & maxrk) = rng End If Next For t = 1 To rk If Cells(t, "B") Like "grp*" Then Cells(t, "P").Formula = x(t) Next Application.ScreenUpdating = True End Sub
Uden option Explicit, kommer der denne fejl ved ReDim x(rk): type mismatch Med option Explicit, kommer der denne fejl ved rk = Cells: Variable not defined
Sub SpecialSort() Application.ScreenUpdating = False Dim x() dim t,rk,rng,maxtal,maxrk Sheets("Ark1").Select rk = Cells(1000, "B").End(xlUp).Row ReDim x(rk) For t = 1 To rk If Cells(t, "B") Like "grp*" Then x(t) = Cells(t, "P").Formula: Cells(t, "P") = "" Next On Error Resume Next For t = 1 To rk If Cells(t, "B") <> "" And Cells(t, "B") <> "grp*" And Cells(t, "P") <> "" Then rng = Range("A" & t & ":IV" & t) maxtal = Application.WorksheetFunction.Max(Range("P" & t & ":P" & rk)) maxrk = Range("P" & t & ":P" & rk).Find(maxtal, LookIn:=xlValues).Row Range("A" & maxrk & ":IV" & maxrk).Copy Range("A" & t & ":IV" & t) Range("A" & maxrk & ":IV" & maxrk) = rng End If Next For t = 1 To rk If Cells(t, "B") Like "grp*" Then Cells(t, "P").Formula = x(t) Next Application.ScreenUpdating = True End Sub
Har set på arket igen, det er vist ikke så vanskeligt alligevel.
Kolonne A indeholder tal som referere til grp. dvs. 100, 180, 260 osv. Jeg prøvede manuelt ved at markere alle linier hvor Kolonne A indeholder 100 også sortere faldende på Kolonne A og derefter Kolonne P Resultatet er tilfredsstillende.
Men hvordan laves koden til det? (hele arket kan ikke sorteres på gang - har prøvet)
Vil det sige at der kun skal sorteres faldende inden for hver gruppe og ikke faldende inden for hele arket ? Som du kan se virker koden ok på mit testark, men der kan naturligvis være forhold hos dig som driller. Du er stadig velkommen til at sende arket hvis... men kikker først på det efter arb,tid.
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.