Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1444to1448
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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.

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.

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.

16 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige