Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Reihe eines Arrays an neues Array übergeben

Forumthread: Reihe eines Arrays an neues Array übergeben

Reihe eines Arrays an neues Array übergeben
Dennis
Hallo zusammen,
ich würde gerne wissen ob es möglich ist eine komplette Reihe eines Arrays an ein neues Array zu übergeben ohne dabei auf schleifen zurück greifen zu müssen.
Also das man direkt sagt
z.B. Array1(800,149)
und nun möchte ich in dem Array2 die komplette Reihe 350 zuweisen (also alle 150 spalten):
Array2 = Array(Reihe 350)
Würde mich über Hilfe sehr freuen.
Schonmal danke im voraus...
Gruss Dennis
Anzeige
AW: Reihe eines Arrays an neues Array übergeben
20.06.2011 17:06:24
MichaV
Hallo,
hier ein Beispiel mit Zeile und Spalte. Mit "reinem" VB gehts nicht, aber in VBA kannst Du ja auf die Excel- Funktion Index zurückgreifen. Aber Vorsicht, es gibt da ekelige Grenzen, Probleme kanns bei langen Texten und grossen Arrays geben. Teste also ein bissel mit Extremwerten rum.

Option Explicit
Sub bla()
Dim quelle(1 To 500, 1 To 500)
Dim ziel()
Dim x%, y%
For x = 1 To 500
For y = 1 To 500
quelle(x, y) = "x:" & x & " y:" & y
Next y, x
ziel = Application.WorksheetFunction.Index(quelle, 5)
Range("A1:A500") = Application.WorksheetFunction.Transpose(ziel)
Erase ziel
ziel = Application.WorksheetFunction.Index(quelle, 0, 5)
Range("B1:B500") = ziel
End Sub
Gruss- Micha
Anzeige
AW: Reihe eines Arrays an neues Array übergeben
20.06.2011 17:17:17
Dennis
Hallo Micha,
danke für deine Antwort.
Mein Problem ist ich habe eine ziemliche grosse Datenmenge. 100.000 Zeilen und 150 Spalten voll mit Werten.
Ich speicher die ganzen Werte in einem Array:
ar = Range("A1").CurrentRegion.Value
Und in einem neuen Array würde ich gerne nur jede 10. Zeile haben....
Hast du evtl. eine Idee wie das gehen könnte. Oder sind das schon zuviele Werte, da du meintest bei grossen Arrays kann es Probleme geben.
Danke & Gruss
Dennis
Anzeige
AW: Reihe eines Arrays an neues Array übergeben
20.06.2011 17:49:51
MichaV
Hallo Dennis,
das Problem gabs bei Arrays mit mehr als 5461 Elementen. Dann gabs aber auch ne Fehlermeldung. Weiss nicht ob das für XL2007 behoben wurde. (Bei XLimits ist das unter "Limitationen der Transpose-Methode" beschrieben, aber den Fehler gabs auch bei der .Index()- Methode. Intern wird da wohl transponiert...) Also einfach ausprobieren.
Ich habe auch mal gelesen dass lange Texte (über 256 Zeichen?) beim transponieren (also evtl. auch durch Index()) abgeschnitten werden.
Du musst ja sowieso mit Schleifen arbeiten, wenn Du jede 10. Zeile haben willst. Kannst Du dann nicht jede 10. Zeile in der CurrentRegion direkt abgreifen? Glaube nicht das das viel länger dauert...
Gruss- Micha
Anzeige
Nachfrage
20.06.2011 18:02:52
Reinhard
Hallo Micha,
"Mit "reinem" VB gehts nicht, aber in VBA kannst Du..."
ich dachte es wäre andersrum. Im VB-Brett des dir bekannten anderen Forums habe ich ähnlich angefragt, also Teile eines mehrdimensionalen großen Arrays in ein kleineres zu extrahieren.
In Vb scheint das zu gehen mit API, in Vba nicht.
In VB nimmt man da "copymemory", das braucht als Argument/paramter einen Pointer auf die variable (den gibts in Vba nicht), dann die Bytelänge und die Angabe wohin, also den memorybereich des neuen Arrays, dann klappt das wohl.
Liege ich falsch? (Ist schon Jahre her wo ich da diesbezüglich angefragt habe)
Gruß
Reinhard
Anzeige
AW: Nachfrage
20.06.2011 18:16:47
MichaV
Hallo Reinhard,
API gehört für mich nicht zu "reinem" VB. Mit API greifts Du auf andere (z.B. Windows-) Funktionen zurück, eben weil sie in VB nicht zur Verfügung stehen.
Gruss- Micha
AW: Reihe eines Arrays an neues Array übergeben
20.06.2011 18:52:43
Daniel
HI
eine entsprechende Funktion ist mir nicht bekannt.
da VBA beim Arbeiten mit Arrays sehr schnell ist, spricht in diesem Fall nichts gegen die Schleifenlösung.
selbst wenn es eine Funktion gäbe, intern müsste sie ja die gleiche Schleife ausführen.
Gruß, Daniel
Anzeige
AW: Reihe eines Arrays an neues Array übergeben
21.06.2011 11:27:48
Dennis
Hallo zusammen,
danke an alle die mir geholfen haben.
Were es nun doch mit Schleifen lösen so wie es Daniel vorgeschlagen hat.
Das Problem bei der Variante von Micha ist, das ich damit zwar genau die eine Reihe aus dem Array heraus holen kann, aber die Reihe dann nicht einfach an das neue Array anhängen kann...
Gruss Dennis
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Reihe eines Arrays an neues Array übergeben in Excel


Schritt-für-Schritt-Anleitung

Um eine komplette Reihe eines Arrays in ein neues Array in Excel zu übergeben, kannst du die folgenden Schritte befolgen:

  1. Daten in ein Array laden: Zuerst musst du deine Daten in ein Array laden. Das kannst du so machen:

    Dim ar As Variant
    ar = Range("A1").CurrentRegion.Value
  2. Neues Array deklarieren: Erstelle ein neues Array, das die gewünschten Daten speichern soll:

    Dim newArray() As Variant
  3. Reihen aus dem ursprünglichen Array zuweisen: Verwende die WorksheetFunction.Index Methode, um eine komplette Reihe zuzuweisen. Hier ist ein Beispiel, um die 350. Reihe zu verwenden:

    newArray = Application.WorksheetFunction.Index(ar, 350, 0)
  4. Daten zurück in das Excel-Blatt schreiben: Schreibe das neue Array zurück ins Arbeitsblatt:

    Range("A1").Resize(1, UBound(newArray, 2)).Value = newArray

Häufige Fehler und Lösungen

  • Problem: Fehlermeldung bei großen Arrays.

    • Lösung: Bei Arrays mit mehr als 5461 Elementen kann es zu Problemen kommen. Reduziere die Anzahl der Elemente oder teste mit kleineren Arrays, um sicherzustellen, dass deine Methode funktioniert.
  • Problem: Texte werden abgeschnitten.

    • Lösung: Achte darauf, dass Texte in einem Array nicht länger als 256 Zeichen sind, besonders wenn du WorksheetFunction.Transpose verwendest.

Alternative Methoden

Wenn du keine Schleifen verwenden möchtest, kannst du die Index-Methode von Excel verwenden, um gezielt auf bestimmte Reihen zuzugreifen. Eine weitere Option ist die Verwendung von Application.Transpose, um die Daten in ein neues Format zu bringen, auch wenn dies bei großen Datenmengen problematisch sein kann.


Praktische Beispiele

Hier ist ein praktisches Beispiel, um jede 10. Zeile eines Arrays auszuwählen und in ein neues Array zu speichern:

Dim sourceArray As Variant
Dim filteredArray() As Variant
Dim i As Long, counter As Long

sourceArray = Range("A1").CurrentRegion.Value
ReDim filteredArray(1 To Application.WorksheetFunction.RoundUp(UBound(sourceArray, 1) / 10, 0))

counter = 1
For i = 1 To UBound(sourceArray, 1)
    If i Mod 10 = 0 Then
        filteredArray(counter) = sourceArray(i, 1)
        counter = counter + 1
    End If
Next i

Tipps für Profis

  • Nutze die Application.ScreenUpdating und Application.Calculation Eigenschaften, um die Ausführungsgeschwindigkeit zu erhöhen, wenn du mit großen Datenmengen arbeitest:

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
  • Experimentiere mit der WorksheetFunction.Rank-Methode, um Ränge in deinem Array zu bestimmen, falls das für deine Analyse relevant ist.


FAQ: Häufige Fragen

1. Kann ich mit VBA auf mehrdimensionale Arrays zugreifen?
Ja, du kannst mit VBA auf mehrdimensionale Arrays zugreifen, indem du die entsprechenden Indizes verwendest.

2. Gibt es eine maximale Größe für Arrays in Excel?
Ja, bei Excel gibt es Einschränkungen für die Größe von Arrays, die je nach Version variieren können. Bei großen Datenmengen ist es ratsam, die Anzahl der Elemente zu reduzieren.

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