Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1364to1368
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
Inhaltsverzeichnis

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

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

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

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige