Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Daten in Tabelle schreiben, wie gehts schneller

Daten in Tabelle schreiben, wie gehts schneller
11.06.2014 21:20:28
Christian
Hallo Forum,
mit nachszehenden Code schreibe ich eine Listbox in die Tabelle.
Wenn die Anzahl der Zeilen größer ist, dauert es ein weilchen...
Meine Frage: Wie gehts schneller?
Mein Versuche mit einem Array über ReDim Preserve scheitern an mangelnden Kenntnissen!
Danke fürs Helfen!
MfG Christian
Private Sub MatinListe()
'# Materialliste von LB in Tabelle #
Dim iRow As Integer, iCol As Integer, iCounter As Integer
Application.ScreenUpdating = False
Application.EnableEvents = False
wksMat.Range("B21:F2500").ClearContents
For iRow = 0 To Me.ListBox1.ListCount - 1
iCounter = iCounter + 1
For iCol = 1 To 5
Select Case iCol
Case 1, 3
Worksheets("Material").Cells(iCounter + 20, iCol + 1) = Me.ListBox1.List(iRow, iCol - 1)
Case 2, 4, 5
Worksheets("Material").Cells(iCounter + 20, iCol + 1) = CDbl(Me.ListBox1.List(iRow, iCol - _
1)) * 1
End Select
Next iCol
Next iRow
wksMat.Cells(18, 4) = CDbl(Me.TextBox1)
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten in Tabelle schreiben, wie gehts schneller
11.06.2014 21:45:03
Raphael
Hallo Christian,
so wie ich deinen Code interpretiere brauchst du keine ReDim und auch kein Preserve (unter www.online-excel.de findest du noch einen beschrieb zu Redim Preserve).
Da du den Bereich B21:F2500 vorher bereinigst nehme ich an das du die Daten schlussendlich in diesen Bereich schreiben willst. Also kennst du die Ausdehnung des Arrays und brauchst dieses nicht während der Laufzeit des Codes anzupassen.
Dim arrSchreiben(2478,4)
Dann schreibst du die Werte anstatt in die Tabelle ins Array und das Array am Ende in die Tabelle.
Gruess
Raphael

Anzeige
AW: Daten in Tabelle schreiben, wie gehts schneller
11.06.2014 22:11:29
Christian
Hallo Raphael,
Danke für die Antwort.
Der Bereich ist nicht ganz eindeutig festgelegt, hängt ja von der ListBox ab.
Der bisherige Ansatz funtioniert noch nicht richtig:
Private Sub CommandButton4_Click()
wksMat.Range("B21:F2500").ClearContents
Dim arr() As Variant
Dim iRowL As Integer, iRow As Integer, iCol As Integer, iRowU As Integer
iRowL = Me.ListBox1.ListCount
For iRow = 1 To iRowL
ReDim Preserve arr(0 To iRowU, 0 To 4)
arr(iRowU, 0) = Me.ListBox1.List(iRow - 1, 0)
arr(iRowU, 1) = Me.ListBox1.List(iRow - 1, 1)
arr(iRowU, 2) = Me.ListBox1.List(iRow - 1, 2)
arr(iRowU, 3) = Me.ListBox1.List(iRow - 1, 3)
arr(iRowU, 4) = Me.ListBox1.List(iRow - 1, 4)
iRowU = iRowU + 1
Next iRow
wksMat.Cells(21, 2).Resize(iRowU, 5) = arr
End Sub
MfG Christian

Anzeige
AW: Daten in Tabelle schreiben, wie gehts schneller
11.06.2014 21:53:58
Daniel
Hi
eine Variante, bei der du erst die komplette Listbox in die Tabelle schreibst und hinterher die Texte per Ersetzen in Zahlen wandelst:
With Me.Listbox1
wksMat.Range("B21:F2500").ClearContents
wksMat.Range("B21").Resize(.ListCount, .ColumnCount) = .List
End with
wksMat.Range("C21:C2500,E21:F2500").Replace ",", ".", xlpart
eine reine Array-Variante wäre das hier:
Dim arr
Dim Z As Long
wksMat.Range("B21:F2500").ClearContents
arr = Me.ListBox1.List
For Z = LBound(arr, 1) To UBound(arr, 1)
arr(Z, 2) = CDbl(arr(Z, 2))
arr(Z, 4) = CDbl(arr(Z, 4))
arr(Z, 5) = CDbl(arr(Z, 5))
Next
wksMat.Range("B21").Resize(UBound(arr, 1) - LBound(arr, 2) + 1, UBound(arr, 2) - LBound(arr, 2) + 1) = arr
Gruß Daniel

Anzeige
Danke....
11.06.2014 22:20:16
Christian
Hallo Daniel,
Danke für die Antwort, mit dem zweiten Beispiel gehts richtig flott!!
MfG Christian

AW: war die erste Variante
11.06.2014 22:34:42
Daniel
spürbar langsamer?
sollte eigentlich nicht sein.
Gruß Daniel

AW: war die erste Variante
11.06.2014 22:55:23
Christian
Hallo Daniel,
gestoppt hab ich jetzt nicht, aber die erste Variante ist spürbar langsamer, habe es aber auch erst mal nur mit ca. 1000 Werten laufen lassen!
Bekommt man sowas auch für eine ListBox mit Multiselect hin?
Nur der Neugier halber nachgefragt, da ich einige andere UF's habe, wo über die Auswahl verschiedene Sachen ins Tabellenblatt geschrieben werden können!
Wie gesagt, ist nur reine Neugier, evtl. kennst Du ja einen guten Link zu einem Tutorial!
Nochmal danke für die Hilfe!
MfG Christian

Anzeige
AW: war die erste Variante
11.06.2014 23:18:50
Daniel
klar
mit Listbox1.Selected(IndexNr) kannst du abfragen, ob eine bestimmte Listboxzeile selektiert ist und die Schleife entsprechend aufbauen.
Wenn du mit Arrays arbeitest, sind Schleifen kein Problem in bezug auf Verarbeitungszeit.
Gruß Daniel
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
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