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

Tabellenbereich mit Array o.ä. füllen

Forumthread: Tabellenbereich mit Array o.ä. füllen

Tabellenbereich mit Array o.ä. füllen
09.01.2009 15:02:04
dennis
Hallo zusammen,
weiss jemand eine Möglichkeit wie man mehrere Werte gleichzeitig in ein Exceltabellenblatt bekommt?
Mein Problem ist folgendes:
Ich berechne mir über eine Schleife die x,y Werte für ein Diagramm.
Diese würde ich gerne vorher speichern (z.B. in einem Array, bzw. Matrix) und diese dann direkt auf das Tabellenblatt übertragen.
Ich könnte zwar die Werte innerhalb der Schleife jweils übertragen, dies ist allerdings sehr langsam, da ich von einem anderen Programm aus Excel anspreche und dies ziemlich Zeit beansprucht.
Die x-Werte sollen beispielsweise auf Sheet(1) in die Spalte A und die y-Werte auf Sheet(1) in Spalte B übertragen werden.
In Excel befindet sich bereits ein Diagramm welches auf diese Zellen zugreift. Durch das übertragen der gesamten Werte erhoffe ich mir, dass sich das Diagramm sehr schnell an die neuen Werte anpasst.
Über eine Idee oder einen Tipp wäre ich sehr dankbar.
MFG
Dennis
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenbereich mit Array o.ä. füllen
09.01.2009 16:20:00
Chris
Servus Dennis,
mal als Anregung ein kleines Makro:
Option Explicit

Sub t()
Dim xWerteArray() As Double, yWerteArray() As Double
Dim z As Long, i As Long, x As Double, y As Double
y = 10 ' Startwert für y
For i = 1 To 100 ' Schleifenberechnung
x = x + 1 ' für x
ReDim Preserve xWerteArray(z)
xWerteArray(z) = x ' Einlesen in Array x-Werte
y = 0.5 * y ' für y
ReDim Preserve yWerteArray(z)
yWerteArray(z) = y ' Einlesen in Array y-Werte
z = z + 1
Next i
For i = LBound(xWerteArray()) To UBound(xWerteArray()) ' Schreiben der x-u.y-Werte
Cells(i + 1, 1) = xWerteArray(i)
Cells(i + 1, 2) = yWerteArray(i)
Next i
End Sub


Gruß
Chris

Anzeige
AW: Tabellenbereich mit Array o.ä. füllen
09.01.2009 16:28:00
dennis
Hi Chris,
danke für die Anregung. Aber das bringt mir leider nicht so viel:
Da die Werte vom Array nun wieder über eine Schleife ausgelesen werden. Ich denke das wäre wahrscheinlich nochmals etwas langsamer, als wenn ich bereits in der 1. Schleife die Werte übertrage.
Ich suche eher so etwas:
Range("A1:B" & anzahl Werte) = Array_xy_Werte
(aber das macht Excel ja leider nicht mit).
Gruss Dennis
Anzeige
AW: Tabellenbereich mit Array o.ä. füllen
09.01.2009 16:32:00
Jens
Hi,
Array_xy_Werte muss ein Array des Datentyps Variant sein.
mfg Jens
AW: Tabellenbereich mit Array o.ä. füllen
09.01.2009 16:43:25
robert
hi,
kannst du das verwenden?
gruß
robert

Sub ZufallDirekt()
Dim i As Long, vx(1 To 10000, 1 To 1) As Variant
For i = 1 To 10000
vx(i, 1) = vx(i, 1) + i 'Int(500 * Rnd + 1)
Next i
With Worksheets("Tabelle1")
.Range(.Cells(1, 1), .Cells(10000, 1)) = vx
End With
End Sub


Anzeige
AW: Tabellenbereich mit Array o.ä. füllen
12.01.2009 09:37:12
dennis
Danke robert,
funktioniert bestens!!!!
Gruss Dennis
AW: Tabellenbereich mit Array füllen
09.01.2009 17:34:00
Erich
Hallo Dennis,
schau dir das mal an:

Sub arrOut()
Dim arr(3, 4) As Integer
Dim ii As Integer, jj As Integer
For ii = 0 To 3
For jj = 0 To 4
arr(ii, jj) = (ii + 1) * (jj + 1)
Next jj
Next ii
Cells(2, 3).Resize(UBound(arr, 1) - LBound(arr, 1) + 1, _
UBound(arr, 2) - LBound(arr, 2) + 1) = arr
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Tabellenbereich mit Array füllen
12.01.2009 08:26:48
dennis
Hallo Erich und Robert,
vielen Dank für eure Hilfe bin erst jetzt dazu gekommen den Code auszuprobieren, da ich am Wochenende leider keine Zeit hatte.
Beide Codes funktionieren super und machen genau das, was ich gesucht habe.
Noch eine kurze Frage zum Verständniss. Fast das selbe hatte ich auch probiert. Allerdings hatte ich Range("A1:B" & LZ) verwendet. Bei euren Codes wird Range(.Cells()) verwendet.
Ist es immer besser .Cells in Range zu verwenden, also kann Excel das schneller verarbeiten?
Also nochmals vielen Danke für die super Hilfe
Gruss Dennis
Anzeige
AW: Tabellenbereich mit Array füllen
12.01.2009 09:28:00
Erich
Hi Dennis,
"Range" kaommt in meinem Code gar nicht vor, würde aber auch nicht schaden.
Statt

Cells(2, 3).Resize(UBound(arr, 1) - LBound(arr, 1) + 1, _
UBound(arr, 2) - LBound(arr, 2) + 1) = arr
' ginge natürlich auch
Range("C2").Resize(UBound(arr, 1) - LBound(arr, 1) + 1, _
UBound(arr, 2) - LBound(arr, 2) + 1) = arr

Der kleine Scherz dabei bleibt ja erhalten:
Explizit angegeben wird nur die erste Zelle des Bereichs, in den das Array geschrieben werden soll.
Die Anzahl Zeilen und Spalten wird dann mit Resize abhängig von der Arraygröße festgelegt.
Ist zwar etwas länglicher hinzuschreiben, aber dafür muss man sich um die Größe des Bereichs nicht mehr kümmern.
Kürzer wird es natürlich auch, wenn man z. B. LBound(...) immer mit 1 festlegen kann.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Tabellenbereich mit Array füllen
12.01.2009 09:42:00
dennis
Hi Erich,
benutze den Code von Robert der etwas vor die geposted hat.
Da ich schreibfaul bin und die Array-Größe festgelegt ist, weshalb ich die GRöße nicht mehr unbedingt auslesen brauch.

Sub ZufallDirekt()
Dim i As Long, vx(1 To 10000, 1 To 1) As Variant
For i = 1 To 10000
vx(i, 1) = vx(i, 1) + i 'Int(500 * Rnd + 1)
Next i
With Worksheets("Tabelle1")
.Range(.Cells(1, 1), .Cells(10000, 1)) = vx
End With
End Sub


Aber dein Code funktioniert auch super. Denn Code hab ich mir auch schon gespeichert falls ich mal eine komplexere, bzw. dynamische Matrix hab, da macht sich der Code dann wirklich gut.
Danke für deine Rückmeldung.
Gruss Dennis

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Tabellenbereich mit Array füllen in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke im Menü auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Makro eingeben: Füge den folgenden Code ein, um ein Array zu füllen und die Werte in ein Excel-Blatt zu schreiben:

    Sub ArrayFuellen()
       Dim xWerteArray() As Variant
       Dim yWerteArray() As Variant
       Dim i As Long, Anzahl As Long
    
       Anzahl = 100 ' Anzahl der Werte
       ReDim xWerteArray(1 To Anzahl)
       ReDim yWerteArray(1 To Anzahl)
    
       ' Werte berechnen
       For i = 1 To Anzahl
           xWerteArray(i) = i
           yWerteArray(i) = i * 2
       Next i
    
       ' Werte ins Blatt schreiben
       With Sheets("Sheet1")
           .Range("A1:A" & Anzahl) = Application.Transpose(xWerteArray)
           .Range("B1:B" & Anzahl) = Application.Transpose(yWerteArray)
       End With
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und kehre zu Excel zurück. Drücke ALT + F8, wähle das Makro ArrayFuellen und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert": Stelle sicher, dass die Variablen korrekt deklariert sind. Verwende den Datentyp Variant, wenn du mit unterschiedlichen Datentypen arbeitest.
  • Fehler: "Subscript out of range": Überprüfe, ob das Arbeitsblatt, auf das du zugreifst, tatsächlich existiert. Der Name muss exakt übereinstimmen.
  • Langsame Ausführung: Um die Ausführungsgeschwindigkeit zu erhöhen, vermeide das wiederholte Schreiben in Zellen innerhalb einer Schleife. Stattdessen solltest du die Werte zuerst in ein Array füllen und dann das gesamte Array auf einmal in das Blatt schreiben.

Alternative Methoden

  • Excel VBA Array aus Tabelle füllen: Du kannst auch ein bestehendes Excel-Arbeitsblatt als Quelle für dein Array verwenden. Beispiel:

    Sub ArrayAusTabelleFuellen()
       Dim DatenArray As Variant
       DatenArray = Range("A1:B100").Value ' Werte aus den Zellen in ein Array laden
    End Sub
  • Java Array füllen: Falls du mit Java arbeitest, verwende die Methode Arrays.fill(), um Arrays effizient zu befüllen:

    int[] array = new int[100];
    Arrays.fill(array, 10); // Füllt das Array mit 10

Praktische Beispiele

  • Beispiel für zufällige Werte:

    Sub ZufallswerteFuellen()
       Dim i As Long
       Dim vx(1 To 10000, 1 To 1) As Variant
       For i = 1 To 10000
           vx(i, 1) = Int(500 * Rnd + 1) ' Zufallswert zwischen 1 und 500
       Next i
       With Worksheets("Tabelle1")
           .Range(.Cells(1, 1), .Cells(10000, 1)) = vx
       End With
    End Sub
  • Beispiel für prozentuale Füllung einer Zelle:

    Sub ProzentualFüllen()
       Dim i As Long
       For i = 1 To 10
           Cells(i, 1).Value = i * 10 ' Füllt 10, 20, ..., 100
           Cells(i, 1).Interior.Color = RGB(0, i * 25, 0) ' Farbige Füllung basierend auf Wert
       Next i
    End Sub

Tipps für Profis

  • Nutze Application.Transpose: Dies kann dir helfen, ein eindimensionales Array in einen zweidimensionalen Bereich zu überführen, was die Handhabung vieler Daten erleichtert.
  • Vermeide Selektieren: Arbeite direkt mit Objekten, anstatt sie zuerst auszuwählen. Das verbessert die Performance.
  • Verwende Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was Fehler vermeidet und den Code lesbarer macht.

FAQ: Häufige Fragen

1. Wie kann ich ein Array mit Werten aus einer Tabelle füllen?
Du kannst die Werte über Range.Value in ein Array laden. Beispiel: DatenArray = Range("A1:B10").Value füllt das Array mit den Werten aus dem Bereich.

2. Was ist der Unterschied zwischen Range und Cells?
Range ist spezifisch für einen Zellbereich und ermöglicht die Angabe von Zelladressen, während Cells die Zeilen- und Spaltennummer verwendet. Beide Methoden haben ihre Vorzüge, abhängig von der Situation.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige