Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kann man den Code schneller machen?

Kann man den Code schneller machen?
07.09.2015 21:44:37
Frank
Hallo Zusammen!
Ich habe folgenden Code gebastelt:
Private Sub UserForm_Initialize()
With frmSpielverlegungen
.ListBox1.ColumnCount = 17
.ListBox1.ColumnWidths = "35;155;50;35;35;35;35;35;35;35;35;35;35;35;35;35;35"
End With
With frmSpielverlegungen
.ListBox1.Clear
Dim Daten(31, 17)
For lng = 3 To 382
For Z = 0 To 31
'If Cells(Rows.Count, 25).End(xlUp).Row + 1 = "" Then Exit Sub
If Sheets("Ansetzungen").Cells(lng, 25) = "x" Then
Daten(Z, 0) = Sheets("Ansetzungen").Cells(lng, 3)
Daten(Z, 1) = Sheets("Ansetzungen").Cells(lng, 4)
Daten(Z, 2) = Sheets("Ansetzungen").Cells(lng, 5)
Daten(Z, 3) = Sheets("Ansetzungen").Cells(lng, 6)
Daten(Z, 4) = Sheets("Ansetzungen").Cells(lng, 7)
Daten(Z, 5) = Sheets("Ansetzungen").Cells(lng, 8)
Daten(Z, 6) = Sheets("Ansetzungen").Cells(lng, 9)
Daten(Z, 7) = Sheets("Ansetzungen").Cells(lng, 10)
Daten(Z, 8) = Sheets("Ansetzungen").Cells(lng, 11)
Daten(Z, 9) = Sheets("Ansetzungen").Cells(lng, 12)
Daten(Z, 10) = Sheets("Ansetzungen").Cells(lng, 13)
Daten(Z, 11) = Sheets("Ansetzungen").Cells(lng, 14)
Daten(Z, 12) = Sheets("Ansetzungen").Cells(lng, 15)
Daten(Z, 13) = Sheets("Ansetzungen").Cells(lng, 26)
Daten(Z, 14) = Sheets("Ansetzungen").Cells(lng, 27)
Daten(Z, 15) = Sheets("Ansetzungen").Cells(lng, 28)
Daten(Z, 16) = lng
lng = lng + 1
End If
Next Z
.ListBox1.List = Daten
Next lng
End With
End Sub
Ich hoffe ihr könnt erkennen was der Code erledigt. Er befüllt mir 'ne ListBox. Ich finde aber, dass es recht lange dauert. Kann man das beschleunigen, oder was mache ich grundsätzlich falsch?
Gruß Frank H.

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kann man den Code schneller machen?
07.09.2015 21:57:07
Nepumuk
Hallo,
teste mal:
Private Sub UserForm_Initialize()
    
    Dim Daten(31, 17) As Variant, avntValues As Variant
    
    With Worksheets("Ansetzungen")
        avntValues = .Range(.Cells(3, 3), .Cells(382, 28)).Value
    End With
    
    With frmSpielverlegungen
        
        .ListBox1.ColumnCount = 17
        .ListBox1.ColumnWidths = "35;155;50;35;35;35;35;35;35;35;35;35;35;35;35;35;35"
        .ListBox1.Clear
        
        For lng = LBound(avntValues) To UBound(avntValues)
            
            If avntValues(lng, 25) = "x" Then
                
                For Z = 0 To 31
                    
                    Daten(Z, 0) = avntValues(lng, 3)
                    Daten(Z, 1) = avntValues(lng, 4)
                    Daten(Z, 2) = avntValues(lng, 5)
                    Daten(Z, 3) = avntValues(lng, 6)
                    Daten(Z, 4) = avntValues(lng, 7)
                    Daten(Z, 5) = avntValues(lng, 8)
                    Daten(Z, 6) = avntValues(lng, 9)
                    Daten(Z, 7) = avntValues(lng, 10)
                    Daten(Z, 8) = avntValues(lng, 11)
                    Daten(Z, 9) = avntValues(lng, 12)
                    Daten(Z, 10) = avntValues(lng, 13)
                    Daten(Z, 11) = avntValues(lng, 14)
                    Daten(Z, 12) = avntValues(lng, 15)
                    Daten(Z, 13) = avntValues(lng, 26)
                    Daten(Z, 14) = avntValues(lng, 27)
                    Daten(Z, 15) = avntValues(lng, 28)
                    Daten(Z, 16) = lng
                    
                    lng = lng + 1
                    
                End If
            Next Z
            
            .ListBox1.List = Daten
            
        Next lng
    End With
End Sub

Gruß
Nepumuk

Anzeige
Ooooooooops
07.09.2015 22:04:05
Nepumuk
Da waren noch ein paar Fehler drin:
Private Sub UserForm_Initialize()
    
    Dim Daten(31, 17) As Variant, avntValues As Variant
    Dim lng As Long, z As Long
    
    With Worksheets("Ansetzungen")
        avntValues = .Range(.Cells(3, 1), .Cells(382, 28)).Value
    End With
    
    With frmSpielverlegungen
        
        .ListBox1.ColumnCount = 17
        .ListBox1.ColumnWidths = "35;155;50;35;35;35;35;35;35;35;35;35;35;35;35;35;35"
        .ListBox1.Clear
        
        For lng = LBound(avntValues) To UBound(avntValues)
            
            If avntValues(lng, 25) = "x" Then
                
                For z = 0 To 31
                    
                    Daten(z, 0) = avntValues(lng, 3)
                    Daten(z, 1) = avntValues(lng, 4)
                    Daten(z, 2) = avntValues(lng, 5)
                    Daten(z, 3) = avntValues(lng, 6)
                    Daten(z, 4) = avntValues(lng, 7)
                    Daten(z, 5) = avntValues(lng, 8)
                    Daten(z, 6) = avntValues(lng, 9)
                    Daten(z, 7) = avntValues(lng, 10)
                    Daten(z, 8) = avntValues(lng, 11)
                    Daten(z, 9) = avntValues(lng, 12)
                    Daten(z, 10) = avntValues(lng, 13)
                    Daten(z, 11) = avntValues(lng, 14)
                    Daten(z, 12) = avntValues(lng, 15)
                    Daten(z, 13) = avntValues(lng, 26)
                    Daten(z, 14) = avntValues(lng, 27)
                    Daten(z, 15) = avntValues(lng, 28)
                    Daten(z, 16) = lng
                    
                    lng = lng + 1
                    
                Next z
            End If
        Next lng
        
        .ListBox1.List = Daten
        
    End With
End Sub

Anzeige
AW: Ooooooooops
07.09.2015 22:15:07
Frank
Hallo Nepumuk!
Jetzt läuft er bedeutend schneller. Jedoch zeigt er mir nun in der ListBox 'ne Menge Daten an, obwohl in Spalte 25 nur einmal ein x vorkommt, also soll auch nur ein Datensatz angezeigt werden! Wo liegt da eventuell noch ein Fehler?
Gruß Frank H.

AW: Kann man den Code schneller machen?
07.09.2015 22:09:14
Frank
Hallo Nepumuk!
Leider kein Erfolg, dauert genau so lange und bei deinem Code bleibt die ListBox sogar leer, obwohl sie einen Eintrag haben müsste! Trotzdem danke für dein Interesse, vielleicht schaust du noch mal drüber?
Gruß Frank H.

Anzeige
AW: Kann man den Code schneller machen?
07.09.2015 22:16:59
Nepumuk
Hallo Frank,
ich bin mit deinen Arrays durcheinander gekommen. So sollte es passen:
Private Sub UserForm_Initialize()
    
    Dim Daten() As Variant, avntValues As Variant
    Dim lng As Long, lngCount As Long
    
    With Worksheets("Ansetzungen")
        avntValues = .Range(.Cells(3, 1), .Cells(382, 28)).Value
    End With
    
    With frmSpielverlegungen
        
        .ListBox1.ColumnCount = 17
        .ListBox1.ColumnWidths = "35;155;50;35;35;35;35;35;35;35;35;35;35;35;35;35;35"
        .ListBox1.Clear
        
        For lng = LBound(avntValues) To UBound(avntValues)
            
            If avntValues(lng, 25) = "x" Then
                
                lngCount = lngCount + 1
                
                Redim Preserve Daten(0 To 16, 1 To lngCount)
                
                Daten(0, lngCount) = avntValues(lng, 3)
                Daten(1, lngCount) = avntValues(lng, 4)
                Daten(2, lngCount) = avntValues(lng, 5)
                Daten(3, lngCount) = avntValues(lng, 6)
                Daten(4, lngCount) = avntValues(lng, 7)
                Daten(5, lngCount) = avntValues(lng, 8)
                Daten(6, lngCount) = avntValues(lng, 9)
                Daten(7, lngCount) = avntValues(lng, 10)
                Daten(8, lngCount) = avntValues(lng, 11)
                Daten(9, lngCount) = avntValues(lng, 12)
                Daten(10, lngCount) = avntValues(lng, 13)
                Daten(11, lngCount) = avntValues(lng, 14)
                Daten(12, lngCount) = avntValues(lng, 15)
                Daten(13, lngCount) = avntValues(lng, 26)
                Daten(14, lngCount) = avntValues(lng, 27)
                Daten(15, lngCount) = avntValues(lng, 28)
                Daten(16, lngCount) = lngCount
                
            End If
        Next lng
        
        .ListBox1.Column = Daten
        
    End With
End Sub

Und was heißt lange? Das Ganze dauert bei mir 8 Millisekunden.
Gruß
Nepumuk

Anzeige
AW: Kann man den Code schneller machen?
07.09.2015 22:28:06
Frank
Hallo Nepumuk!
So funzt es prima! Vielen lieben Dank und eine Gute Nacht!
Gruß Frank H.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige