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

Forumthread: Array einen Bereich übergeben

Array einen Bereich übergeben
22.06.2007 10:00:00
Ulf
Hallo ihr Excelprofis
Ich habe einen Array einen Bereich übergeben.
Bereich=worksheets(1).range("a1:H500")
Dann klappere ich mit einer Schleife ab und suche ich einen bestimmten Wert im Bereich und möchte dann einen bestimmten Bereich an ein sheet übergeben.
Geht das überhaupt oder muß man jedes einzeln übergeben?
z.Bsp. so?
.Range(.Cells(id, 2), .Cells(id, 4)) = Bereich(Range(Cells(i, 5), Cells(i, 7)))
Im Voraus vielen Dank
Mfg Ulf

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Array einen Bereich übergeben
22.06.2007 21:36:34
Daniel
Hi
wenn du dein Array wie in deinem Bespiel über eine Range befüllt hast, dann kannst du das Array genauso einfach wieder zurückschreiben, wie du es eingelesen hast.
Wichtig beim zurückschreiben ist, daß das Array und der Zellbereich gleich groß sind.
Bereich=worksheets(1).range("a1:H500")
...
Worksheets(1).range("a1:h500") = Bereich
Gruß, Daniel

Anzeige
AW: Array einen Bereich übergeben
23.06.2007 19:52:20
Ulf
Hallo Daniel
Das ist ja mein Problem
Ich möchte ja nur ein bereich vom array zurückgeben und nicht das ganze
Worksheets(1).range("a1:h500") = Bereich
klappt ist klar
aber
Worksheets(1).range("a100:h100") = Bereich
nicht
auch nicht
Worksheets(1).range("a100:h100") = Bereich((100,1),(100,8))
ist natürlich ein Beispiel
Worksheets(1).range("a100") = Bereich(100,1) klappt auch
aber ich hätte gerne einen bereich zurückgegeben
mfg Ulf

Anzeige
AW: Array einen Bereich übergeben
23.06.2007 21:23:43
Gerd
Hallo Ulf,
etwas kleiner dimensioniert zum Testen.

Sub test()
Dim Bereich As Range
Set Bereich = Tabelle1.Range(Tabelle1.Cells(2, 1), Tabelle1.Cells(10, 8))
Tabelle2.Range(Tabelle2.Cells(5, 3), Tabelle2.Cells(8, 7)).Value = _
Range(Bereich(1, 2), Bereich(4, 6)).Value
End Sub


Gruß Gerd

Anzeige
AW: Array einen Bereich übergeben
24.06.2007 15:56:05
Ulf
Hallo Gerd
Danke
eigendlich ganz logisch
so habe ich es gemeint
mfg Ulf

AW: Array einen Bereich übergeben
24.06.2007 16:33:00
Daniel
Hi
wobei zu beachten ist, das BEREICH in diesem Fall keine Array-Variable mehr ist, sondern ein Range-Objekt.
sobald die Daten aus Bereich einzeln in einer Schleife bearbeitet werden müssen, wird diese Variante deutlich langsamer sein.
Gruß, Daniel

Anzeige
AW: Array einen Bereich übergeben
24.06.2007 16:13:00
Daniel
Hi
wenn ich es nochmal für mich formulieren darf:
du hast eine Array-Variable "Bereich". (500 x 8)
von dieser Array-Variabel "Bereich" möchtsest du einen Ausschnitt, dh. mehrere Werte, aber nicht alle, in ein Excel-Tabellenblatt zurückgeben.
Da gibts (meines bescheidenen Wissens nach) zwei möglichkeiten:
1. in einer Schleife einzeln Wert für Wert von der Array-Variable nach Excel zurückschreiben
2. - eine neue Array-Variable erstellen, die ganauo groß dimensioniert ist, wie der gewünschte Ausschnitt
- diese neue Array-Variable per Schleife aus der alten Array-Variable befüllen (einzeln. Wert per Wert)
- die neue Array-Variable als Ganzes ins Excelblatt zurückschreiben
Variante 2 ist jetzt jetzt von der Programmierung her schon etwas komplexer, der Vorteil besteht aber darin, das VBA rasend schnell ist, solange nur mit Array-Variablen gearbeitet wird. Sobald Excel-Zellen oder RANGE-Objekte ins Spiel kommen, wirds um 10er-Potenzen langsamer.
der Ratschlag, "keine Schleifen verwenden" kann daher ignoriert werden, solange nur mit Array-Variablen gearbeitet wir.
Daher ist es am effeiktivsten, den Ausschnitt erst in eine neue Arry-Variabel zu schreiben, die dann enBloc nach Excel zurückgeschrieben werden kann.
Gruß, Daniel
PS. um das Zurückschreiben der Arrays nach Excel schnell und einfach zu Programmieren (Zellbereich und Array-Variable müssen ja genau gleich groß sein), solltest du dich mal mit den Funktionen UBBOUND(Bereich,1) für array-Variablen und Range(xxx).RESIZE(x,y) vertraut machen.

Anzeige
AW: Array einen Bereich übergeben
24.06.2007 16:52:21
Gerd
Hallo Daniel,
soweit die Anwendungshäufigkeit es erfordert u. wenn Du Effektivität mit Geschwindigkeit gleichsetzt,
stimme ich dir voll zu.
Lasse Ulf erst mal verstehen, dass ein Range-Objekt auch ein zwei-dimensionaler eins-basierter Variant-Array ist.
Mit echten Arrays(Datenfeldern) kann er sich dann immer noch befassen.
Gruß Gerd

Anzeige
AW: Array einen Bereich übergeben
24.06.2007 18:04:10
Daniel
Hi
naja, bei VBA-GUT bin ich halt davon ausgegangen, daß Array-Variablen ihm ein begriff sind, zumal die eingangsfrage ja recht eindeutig in diese Richtung gestellt war.
Gruß, Daniel

AW: Array einen Bereich übergeben
25.06.2007 14:31:57
Ulf
Hallo Gerd und Daniel
Erst einmal vielen Dank an euch beiden
mir geht es schon um die Geschwindigkeit und eure Antworten haben mir dabei sehr geholfen
mfg Ulf
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Array einen Bereich übergeben in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Array initialisieren: Zuerst musst du ein Array erstellen, das die Daten aus einem bestimmten Bereich aufnimmt. Du kannst dies mit folgendem Code tun:

    Dim Bereich As Variant
    Bereich = Worksheets(1).Range("A1:H500").Value
  2. Daten verarbeiten: Um bestimmte Werte aus dem Array zu extrahieren und in ein anderes Sheet zu übertragen, kannst du eine Schleife verwenden. Beispiel:

    Dim i As Long
    For i = 1 To UBound(Bereich, 1)
       If Bereich(i, 1) = "Suchwert" Then
           ' Übertrage einen Ausschnitt des Arrays
           Worksheets(2).Range("A1:D1").Value = _
           Application.Index(Bereich, i, Array(1, 2, 3, 4))
       End If
    Next i
  3. Daten zurückgeben: Wenn du einen bestimmten Bereich des Arrays zurückgeben möchtest, stelle sicher, dass der Zielbereich in Excel und das Array die gleiche Dimension haben.

    Worksheets(1).Range("A100:H100").Value = Application.Index(Bereich, 100, Array(1, 2, 3, 4, 5, 6, 7, 8))

Häufige Fehler und Lösungen

  • Fehler: Der Bereich in Excel ist nicht gleich groß wie das Array.

    • Lösung: Stelle sicher, dass der Zellbereich, in den du die Daten schreiben möchtest, die gleiche Anzahl von Zeilen und Spalten wie das Array hat.
  • Fehler: Die Verwendung von Range funktioniert nicht wie erwartet.

    • Lösung: Verwende Application.Index, um die spezifischen Teile des Arrays zu extrahieren, bevor du sie in den Zielbereich schreibst.

Alternative Methoden

  1. Direktes Schreiben aus dem Array: Wenn du nur einen bestimmten Teil des Arrays benötigst, kannst du auch ein neues Array erstellen und nur die benötigten Elemente kopieren:

    Dim NewArray() As Variant
    ReDim NewArray(1 To 1, 1 To 8)
    For j = 1 To 8
       NewArray(1, j) = Bereich(100, j)
    Next j
    Worksheets(1).Range("A100:H100").Value = NewArray
  2. Verwendung von UBound: Um die Dimensionen des Arrays zu ermitteln, kannst du die Funktion UBound verwenden, um sicherzustellen, dass du die richtigen Indizes verwendest.


Praktische Beispiele

  • Beispiel 1: Übertragen einer bestimmten Zeile in ein anderes Sheet.

    Dim i As Long
    For i = 1 To UBound(Bereich, 1)
       If Bereich(i, 1) = "Test" Then
           Worksheets(2).Range("A" & i).Value = Bereich(i, 2)
       End If
    Next i
  • Beispiel 2: Verwenden von Range und Array zur Datenübertragung.

    Worksheets(2).Range("A1:D4").Value = Application.Index(Bereich, 1, Array(1, 2, 3, 4))

Tipps für Profis

  • Effizienz: Reduziere die Anzahl der Wechsel zwischen Array und Range, um die Leistung zu verbessern. Arbeite so viel wie möglich nur mit Arrays.

  • Verwende Resize: Nutze die Resize-Methode, um sicherzustellen, dass dein Zielbereich die gleiche Größe wie dein Array hat:

    Worksheets(1).Range("A100").Resize(1, 8).Value = NewArray
  • Debugging: Verwende Debug.Print, um die Werte deines Arrays während der Entwicklung anzuzeigen, um sicherzustellen, dass du die richtigen Daten überträgst.


FAQ: Häufige Fragen

1. Wie übergebe ich ein Array an einen Bereich in Excel?
Du kannst ein Array an einen Excel-Bereich übergeben, indem du einfach den Bereich mit der Array-Variable zuweist, wie im Beispiel oben gezeigt.

2. Was ist der Unterschied zwischen einem Array und einem Range-Objekt?
Ein Array ist eine Sammlung von Daten, die im Speicher gehalten werden, während ein Range-Objekt eine Referenz auf Zellen in Excel ist.

3. Wie kann ich nur einen Teil eines Arrays zurückgeben?
Du kannst die Application.Index-Funktion verwenden, um spezifische Teile eines Arrays auszuwählen und an einen Excel-Bereich zu übergeben.

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