05. marts 2011 - 01:25
Der er
2 kommentarer og 1 løsning
Hvorfor laver dette array alt for mange "pladser"? Noget galt med redimen
Ark1, kolonne A indeholder en masse forskellige datoer, disse datoer går mange af dem igen, jeg vil derfor overfører de unikke datoer til XRngArray(). Min kode skriver rigtig nok kun de unikke datoer ind i XRngArray(), men det bliver redimet lige så stort som Kolonne indeholder datoer... Kan nogen hjælpe mig? Sub unikke() Dim VRng As Range, XRng As Range Dim VXBol As Boolean Dim VRngArray() As Variant Dim XRngArray() As Variant Set VRng = Range(ThisWorkbook.Worksheets("Ark1").Range("A1"), ThisWorkbook.Worksheets("Ark1").Range("A65000").End(xlUp)) UniqueX = 1 VRngArray = VRng.Value ReDim XRngArray(UniqueX) For i = 1 To UBound(VRngArray) UniqueX = UniqueX + 1 ReDim Preserve XRngArray(UniqueX) VXBol = False For v = 1 To UBound(XRngArray) If XRngArray(v) = VRngArray(i, 1) Then VXBol = True End If Next If VXBol = False Then XRngArray(UniqueX) = VRngArray(i, 1) End If Debug.Print UBound(XRngArray) Debug.Print XRngArray(UniqueX - 1) Next End Sub
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
05. marts 2011 - 01:51
#1
Er dette en optimalløsning? Sub unikke() Dim VRng As Range, XRng As Range Dim VXBol As Boolean Dim VRngArray() As Variant Dim XRngArray() As Variant Set VRng = Range(ThisWorkbook.Worksheets("Ark1").Range("A1"), ThisWorkbook.Worksheets("Ark1").Range("A65000").End(xlUp)) UniqueX = 1 VRngArray = VRng.Value ReDim XRngArray(UniqueX) For i = 1 To UBound(VRngArray) ReDim Preserve XRngArray(UniqueX) VXBol = False For v = 1 To UBound(XRngArray) If XRngArray(v) = VRngArray(i, 1) Then VXBol = True End If Next If VXBol = False Then XRngArray(UniqueX) = VRngArray(i, 1) UniqueX = UniqueX + 1 End If Debug.Print UBound(XRngArray) Debug.Print XRngArray(UniqueX - 1) Next End Sub
05. marts 2011 - 02:08
#2
Sub unikke() Dim VRng As Range, XRng As Range Dim VXBol As Boolean Dim VRngArray() As Variant Dim XRngArray() As Variant Set VRng = Range(ThisWorkbook.Worksheets("Ark1").Range("A1"), ThisWorkbook.Worksheets("Ark1").Range("A65000").End(xlUp)) UniqueX = 1 VRngArray = VRng.Value 'ReDim XRngArray(UniqueX) For i = 1 To UBound(VRngArray) ReDim Preserve XRngArray(UniqueX) VXBol = False For v = 1 To UBound(XRngArray) If XRngArray(v) = VRngArray(i, 1) Then VXBol = True End If Next If VXBol = False Then XRngArray(UniqueX) = VRngArray(i, 1) UniqueX = UniqueX + 1 End If 'Debug.Print UBound(XRngArray) 'Debug.Print XRngArray(UniqueX - 1) Next For l = 1 To UBound(XRngArray) Debug.Print XRngArray(l) Next 'Sort array For lLoop = 0 To UBound(XRngArray) For lLoop2 = lLoop To UBound(XRngArray) If XRngArray(lLoop2) < XRngArray(lLoop) Then str1 = XRngArray(lLoop) str2 = XRngArray(lLoop2) XRngArray(lLoop) = str2 XRngArray(lLoop2) = str1 End If Next lLoop2 Next lLoop 'Output sorted array Worksheets("Ark1").Range("B1:B" & UBound(XRngArray) + 1) = WorksheetFunction.Transpose(XRngArray) End Sub
05. marts 2011 - 02:35
#3
lukker
Kurser inden for grundlæggende programmering