Tipp 0414 Daten in Zellen schreiben
Autor/Einsender:
Datum:
  Angie
29.08.2004
Entwicklungsumgebung:   Excel 2000
Die einfachste aber auch langsamste Methode Zellen zu bearbeiten besteht darin, auf jede Zelle einzeln zuzugreifen. Beispielsweise kann mit der Cells-Methode auf einzelne Zellen oder auf einen rechteckigen Bereich zugegriffen werden. Wenn Sie jedoch große Datenmengen in ein Tabellenblatt einfügen müssen, ist diese Methode weniger geeignet.
Zur Demo werden in den folgenden zwei Beispielen 100.000 Zellen (1000 Zeilen x 100 Spalten) mit Zufallszahlen gefüllt. Im ersten Beispiel wird mit der Cells-Methode jeder einzelnen Zelle ein Wert zugewiesen (Dauer ca. 4,5 Sekunden), im Vergleich dazu werden im zweiten Beispiel die Werte zunächst in einem Datenfeld zwischengespeichert, und dann als Ganzes in den Zellbereich kopiert (Dauer ca. 0,14 Sekunden). Bei 10.000 Zellen ist das Verhältnis 0,45 zu 0,015 Sekunden. Die hier angegebene Zeiten können natürlich je nach Rechnerleistung/-auslastung schwanken.
Beispiel 1:  Cells-Methode (Dauer ca. 4,5 Sekunden)
 
Public Sub AddDataWithCellsMethod()
  Const cRowsMax As Long = 1000
  Const cColsMax As Integer = 100

  Dim wksDest    As Worksheet
  Dim nRow       As Long
  Dim nCol       As Integer

  Application.ScreenUpdating = False

  Set wksDest = ThisWorkbook.Worksheets(1)
  wksDest.UsedRange.Delete

  For nRow = 1 To cRowsMax
    For nCol = 1 To cColsMax
      wksDest.Cells(nRow, nCol) = Int(Rnd * 1000)
    Next
  Next

  wksDest.UsedRange.Columns.AutoFit
  Set wksDest = Nothing
  Application.ScreenUpdating = True
End Sub
 
Beispiel 2:  Datenfeld (Dauer ca. 0,14 Sekunden)
 
Public Sub AddDataWithArray()
  Const cRowsMax As Long = 1000
  Const cColsMax As Integer = 100

  Dim wksDest    As Worksheet
  Dim nRow       As Long
  Dim nCol       As Integer

  Dim avarArray(1 To cRowsMax, 1 To cColsMax) As Variant

  Application.ScreenUpdating = False

  Set wksDest = ThisWorkbook.Worksheets(1)
  wksDest.UsedRange.Delete

  For nRow = 1 To cRowsMax
    For nCol = 1 To cColsMax
      avarArray(nRow, nCol) = Int(Rnd * 1000)
    Next
  Next
  wksDest.Cells(1, 1).Resize(cRowsMax, cColsMax) = avarArray

  wksDest.UsedRange.Columns.AutoFit
  Set wksDest = Nothing
  Application.ScreenUpdating = True
End Sub
 
Microsoft Links zum Thema
166342 Description of the limitations for working with arrays in Excel 2000, Excel 2002, and Excel 2003
177991 XL Limitations of Passing Arrays to Excel Using Automation
Hinweis
Die im Download befindliche *.bas-Datei kann in Excel im VB-Editor importiert werden.

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
Excel-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (2,1 kB) Downloads bisher: [ 1733 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 28. August 2011