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

Teilbereiche aus Array

Teilbereiche aus Array
Fred
Hallo zusammen,
ich bin mir sicher, dass mein Problem schon 100 Mal diskutiert worden ist, jedoch konnte ich über die Suche irgendwie nichts passendes finden.
Mein Problem: ich habe einen Array myarray(1 to 10000, 1 to 20). Gibt es ein Möglichkeit:
a.) nur auf bestimmte Spalten zuzugreifen und diese dann in einem neuen Array zu speichern oder in ein Tabellenblatt zu kopieren? Ich kriege das ganze natürlich über For-Schleifen hin, aber hier muss es doch eine einfachere Lösung geben, oder?
b.) wenn es für a) eine Lösung gibt, gibt es dann auch eine Lösung gleich mehrere Spalten (z.B. 2, 4 und 9) über einen Befehl in einem neuen Array zu speichern? Bei z.B. MATLAB ist das ja kein Problem, jedoch habe ich das Gefühl, dass sowas bei VBA-Arrays irgendwie nicht vorgesehen ist?!
Vielen Dank für eure Hilfe!
Fred

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Teilbereiche aus Array
12.03.2010 11:24:17
MichaV
Hallo,
sowas ist in VB nicht vorgesehen. Da musst Du das Array mit For- Schleifen bearbeiten.
Da Du aber mit VBA arbeitest, kannst Du die Excel- Funktion INDEX nutzen, solange Du bei 2D- Arrays bleibst. Das kann aber bei grossen Arrays und Arrays mit langen Werten zu Fehlern führen, es gibt da zumindest noch in XL2000 eine Limitation.

Option Explicit
Sub test()
Dim myarray(1 To 10000, 1 To 20)
Dim z As Long, s As Long
Dim x As Variant
For z = 1 To 10000
For s = 1 To 20
myarray(z, s) = "zeile=" & z & "  spalte=" & s
Next s
Next z
x = WorksheetFunction.Index(myarray, 2)
Range("A1:Z1") = x
x = WorksheetFunction.Index(myarray, 0, 3)
Range("A10:A100") = x
End Sub
Gruss- Micha
Anzeige
AW: Teilbereiche aus Array
12.03.2010 12:59:03
fcs
Hallo Fred,
Arrayoperationen sind unter VBA begrenzt auf das Vertauschen von Zeilen und Spalten.
Falls solche Auszüge von Arrays öffters benötigt werden, dann solltest du dir eine Function schreiben, die die Daten extrahiert.
Nachfolgend ein Beispiel. Der Auszug aus 10000 Zeilen dauert bei mir etwa 1 Sekunde.
Gruß
Franz
Sub ArrayOps()
Dim Zeile As Long, arr1, arr2, dtime As Double
'Dateneinlesen aus Tabellenblatt
dtime = Time
Application.ScreenUpdating = False
With Worksheets(2)
arr1 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 19))
End With
'Daten aus Array extrahieren
arr2 = ExtractFromArray(arrQuelle:=arr1, arrColumns:=Array(4, 6, 9))
'Daten des 2. Arrays in Tabellenblatt schreiben
With Worksheets(2)
.Range(.Cells(1, 22), .Cells(UBound(arr2, 1), 24)).Value = arr2
End With
Application.ScreenUpdating = True
MsgBox "Dauer" & Time - dtime
End Sub
Function ExtractFromArray(arrQuelle, arrColumns) As Variant
Dim Zeile As Long, Spalte As Long, arr2()
'Ergebnis-Array dimensionieren
ReDim arr2(LBound(arrQuelle) To UBound(arrQuelle), LBound(arrColumns) To UBound(arrColumns))
'Daten in Ergebnis-Array übernehmen
For Zeile = LBound(arrQuelle) To UBound(arrQuelle)
For Spalte = LBound(arrColumns) To UBound(arrColumns)
arr2(Zeile, Spalte) = arrQuelle(Zeile, arrColumns(Spalte))
Next
Next
ExtractFromArray = arr2
End Function

Anzeige
AW: Teilbereiche aus Array
12.03.2010 13:07:51
ransi
HAllo
Wenn deien Arrays nur Zahlen enthlten geht was mit API.
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
    ByRef Destination As Any, _
    ByRef Source As Any, _
    ByVal Length As Long)

Ist aber auch nicht grade einfach....
Ich kann dir nur empfehlen:
setz deine 2 Schleifen auf und Schaufel um.
Das geht so schnell das du es nicht merkst.
Ich nutze Standardmäßig so etwas ähnliches:
Option Explicit


Public Sub Beispieldaten_rein()
With Sheets("Tabelle1").Range("A1:T10000")
    .FormulaLocal = "=ZEILE() & "" "" & SPALTE()"
    .Value = .Value
End With
Aufruf
End Sub


Public Sub Aufruf()
Dim arr As Variant
Dim out As Variant
arr = Sheets("Tabelle1").Range("A1:T10000")
out = extract_arr(arr, 3, 13, 1, 5, 17, 6) 'Zeilen 3 bis 13 der Spalten 1,5,17,6
'Ausgeben
Sheets("Tabelle2").Range("A1").Resize(UBound(out) - LBound(out) + 1, UBound(out, 2)) = out
End Sub


Public Function extract_arr(vntArr As Variant, _
    U As Long, _
    O As Long, _
    ParamArray I() As Variant) As Variant

'U -->die erste Zeile die übertragen werden soll
'O -->die letzte Zeile die Übertragen werden soll
'I--> die einzelnen Spalten die ins neue Array sollen
Dim L As Long
Dim S As Integer
Dim Z As Integer
Redim tmp(U To O, 1 To UBound(I) + 1)
For L = U To O
    For S = LBound(I) + 1 To UBound(I) + 1
        tmp(L, S) = vntArr(L, I(S - 1))
    Next
Next
extract_arr = tmp
End Function


ransi
Anzeige
AW: Teilbereiche aus Array
12.03.2010 13:39:36
Fred
Vielen Dank für eure Hilfe. Die Tipps sind wirklich sehr hilfreich für mich!! Ich werde mir dann wohl eigene Funktionen schreiben, um mit Arrays besser arbeiten zu können.
Viele Grüße
Fred

10 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige