Avatar billede svendj Nybegynder
12. januar 2009 - 11:55 Der er 2 kommentarer og
1 løsning

Sorter i array i VBA

Kære Alle

Jeg har et array af dimensionen 2,6 og jeg har behov for at sortere efter kolonne 2 (der indeholder bogstaver A,B, C ...) samt at de øvrige fem kolonner følger med, så at sige. Jeg bruger ikke 0'te pladsen.

Jeg har kigget her http://www.eksperten.dk/spm/250778, men det første forslag giver mig et problem med list, som VBA siger er uerklæret - det er den også, men skal den erklæres i modersub'en eller i "navnelinien" i subben eller et helt tredie sted? Jeg har bare skrevet WorksheetSort (KoderPaaLinien) i modersub'en.

Det andet forslag siger, at mit array - KoderPaaLinien - ikke er erklæret - VBA: Compile error "type mismatch: array or user-defined type expected" on my string array code - KoderPaaLinien er erklæret på flg. måde:

Dim KoderPaaLinien As Variant
ReDim KoderPaaLinien(UBound(AnnonceKoderListe, 1), 6)

- men det kan sagtens være mig, der erklærer arrays helt forkert. Jeg kalder det som Quicksort (KoderPaaLinien)

Endelig har jeg kigget på http://www.excelwiki.com/VBA/Arrays-BubbleSort - men den går kun op til 2,4 såvidt jeg kan læse.

Puha det blev langt, håber nogen orker at læse det hele

Tak

KH

Svend :o]
Avatar billede svendj Nybegynder
12. januar 2009 - 11:56 #1
20,6 er dimensionerne - sorry
Avatar billede kabbak Professor
12. januar 2009 - 22:26 #2
det nemmeste er at gemme arrayet på et midlertidig ark, brug sortering på arket, læs arrayet ind igen og slet arket
Avatar billede svendj Nybegynder
13. januar 2009 - 09:12 #3
Mjo det gør WorksheetSort i det gamel spørgsmål også, kunne bare ikke få den til at spille - nu ser det således ud, men sexet er det ikke.

Jeg lukker

:o]

'Her sorteres indholdet i KoderPaaLinien - ikke elegant, men det virker :o]
      Sheets.Add
      Range("A1").Select
      For i = 1 To AntalKoderPaaLinien
        For j = 1 To UBound(KoderPaaLinien, 2)
          Range("A1").Offset(i - 1, j - 1) = KoderPaaLinien(i, j)
        Next j
      Next i
     
      ActiveCell.CurrentRegion.Select
      Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
     
      For i = 1 To UBound(KoderPaaLinien, 1)
        For j = 1 To UBound(KoderPaaLinien, 2)
          KoderPaaLinien(i, j) = Range("A1").Offset(i - 1, j - 1)
        Next j
      Next i
     
      Application.DisplayAlerts = False
        ActiveSheet.Delete
      Application.DisplayAlerts = True
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