Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1036to1040
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

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

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
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

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

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige