Avatar billede Morten Nybegynder
19. juni 2003 - 13:05 Der er 3 kommentarer og
1 løsning

Sortering af data i et Array med VBA - TILLÆG

Hej

Bak svarede på følgende spg. (http://www.eksperten.dk/spm/250778)

Jeg har adopteret funktionen som bruger et tmp.ark og excels sort func... men jeg har lagt det i en function så jeg kan kalde det fra alle steder... men hvordan returnerer jeg et array??? fra min function
Avatar billede bak Forsker
19. juni 2003 - 15:41 #1
cddk -> vis lige funktionen :-)
Avatar billede Morten Nybegynder
19. juni 2003 - 15:45 #2
Public Function WorksheetSort(list)
   
    Dim First As Integer, Last As Long
    Dim i As Long
    Dim FirstCell As Range, LastCell As Range
    Dim CurrCell As Range, FillRange As Range
    Dim wshTemp As Worksheet
    Set wshTemp = Worksheets.Add
   
    First = LBound(list, 1)
    Last = UBound(list, 1)
   
    Set FirstCell = wshTemp.Cells(1, 1)
    Set LastCell = wshTemp.Cells(Last, 1)
    Set FillRange = wshTemp.Range(FirstCell, LastCell)
    'Application.ScreenUpdating = False
   
'  Transfer the array to worksheet
    FillRange.Value = list
   
'  Sort the worksheet range
    FirstCell.CurrentRegion.Sort Key1:=FirstCell, Order1:=xlAscending, Orientation:=xlTopToBottom
     
'  Transfer range back to the array and clear range
    For i = First To Last
        list(i, 1) = FirstCell.Offset(i - 1, 0)
    Next i
    Application.DisplayAlerts = False
    wshTemp.Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Function
Avatar billede bak Forsker
19. juni 2003 - 15:47 #3
taget fra "biblen" kap. 11  :-)
Kigger på den, men vender først tilbage i aften ....
Avatar billede bak Forsker
19. juni 2003 - 16:01 #4
Ok, du får den lige alligevel. Den er ikke fejlsikret, men den virker. Pas dog på med datoer. Sub'en er kun med for at teste

Public Function WorksheetSort(list) As Variant
   
    Dim First As Integer, Last As Long
    Dim i As Long
    Dim FirstCell As Range, LastCell As Range
    Dim CurrCell As Range, FillRange As Range
    Dim wshTemp As Worksheet
    Set wshTemp = Worksheets.Add
   
    First = LBound(list, 1)
    Last = UBound(list, 1)
   
    Set FirstCell = wshTemp.Cells(1, 1)
    Set LastCell = wshTemp.Cells(Last, 1)
    Set FillRange = wshTemp.Range(FirstCell, LastCell)
    'Application.ScreenUpdating = False
   
'  Transfer the array to worksheet
    FillRange.Value = list
   
'  Sort the worksheet range
    FirstCell.CurrentRegion.Sort Key1:=FirstCell, Order1:=xlAscending, Orientation:=xlTopToBottom
     
'  Transfer range back to the array and clear range
    For i = First To Last
        list(i, 1) = FirstCell.Offset(i - 1, 0)
    Next i
    Application.DisplayAlerts = False
    wshTemp.Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    WorksheetSort = list
End Function

Sub test_sortering()
Dim x As Variant
Dim t As Variant
x = Range("A1:A50")
t = WorksheetSort(x)
Range("AA1:AA50") = t
End Sub
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