Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1620to1624
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

Nur bestimmte Daten in ein Array einlesen

Nur bestimmte Daten in ein Array einlesen
26.04.2018 09:47:07
Lutz
Hallo,
um eine Array zu befüllen verwende ich aktuell folgenden Code:
Function f_array()
Dim ARRAY_DAT As Variant     ' Array mit den Daten          '
Dim ARRAY_ZMAX As Long       ' max. Anzahl Zeilen im Array  '
Dim ARRAY_SMAX As Long       ' max. Anzahl Spalten im Array '
' Maximale Anzahl Spalten im Array '
ARRAY_SMAX = 20
' Ermittlung Anzahl Zeilen die im Array eingelesen werden sollen '
tbl02.Activate
Range("A1").End(xlDown).Activate
ARRAY_ZMAX = ActiveCell.Row
Application.Goto Reference:=Range("A1"), Scroll:=True
' array mit den Daten aus tbl02 befüllen '
With tbl02
ARRAY_DAT = .Range(.Cells(1, 1), .Cells(ARRAY_ZMAX, ARRAY_SMAX))
End With
End Function
Nun möchte ich aber nur Datensätze im Array einlesen, die in tbl02 in Spalte 5 kein "x" haben.
Wie geht das?
Danke für die Hilfe und Gruß vom Lutz

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nur bestimmte Daten in ein Array einlesen
26.04.2018 10:29:34
Daniel
Hi
gibt mehrere Möglichkeiten.
eine wäre umsortieren, so dass die Zeilen am Anfang und die mit "x" am Ende stehen, so dass du dann den ganzen Block am Anfang einlesen kannst.

with tbl02.usedrange
with .Columns(.columns.Count + 1).Resize(, 2)
.columns(1).FormulaR1C1 = "=Row()"
.columns(2).FormulaR1C1 = "=IF(RC5)=""x"","""",1)"
.Formula = .Value
.EntireRow.Sort key1:=.cells(1, 2), order1:=xlascending, Header:=xlno
ARRAY_ZMAX =  worksheetfunction.Sum(.columns(2))
If ARRAY_ZMAX > 0 Then  Array_dat = tbl02.Cells(1, 1).Resize(ARRAY_ZMAX, ARRAY_SMAX)
.entireRow.sort key1:=.cells(1, 1), order1=xlascending, Header:=xlno
.ClearContents
end with
end with

Gruß Daniel
Anzeige
AW: Nur bestimmte Daten in ein Array einlesen
26.04.2018 10:54:55
Lutz
Ich würde gerne eine "unsortierte" Variante verwenden.
Oder währe es sinnvoller (schneller) die Daten komplett ins array einzulesen und dann nur die gewünschten Datensätze in ein leeres Array einzulesen - und wenn ja wie?
Danke.
AW: Nur bestimmte Daten in ein Array einlesen
26.04.2018 11:05:06
Daniel
Hi
naja, wie du an meinem Code erkennen kannst, sortiere ich hinterher in die Originalreihenfolge zurück.
ansonsten so, arr1 ist das vollständige Array und arr2 das gefilterte:
dim arr1, arr2
dim Z1 as Long, Z2 as long, S as long
arr1 = tbl02.Usedrange.Value
redim arr2(1 to worksheetfunction.Countif(1 to tbl02.Columns(5), "x"), 1 to 20)
for z1 = 1 to ubound(arr1, 1)
if arr1(z1, 5)  "x" then
Z2 = Z2 + 1
for S = 1 to 20
arr2(z2, S) = arr1(Z1, s)
next
end if
next
Gruß Daniel
Anzeige
AW: Nur bestimmte Daten in ein Array einlesen
26.04.2018 11:09:15
Lutz
Mir schwirrt der Kopf...
Ist es den nun eigentlich schneller die Daten erst komplett einzulesen und dann in ein zweites Array zu übergeben oder nicht?
Oder ist es "schneller" die Daten komplett eizulesen und dann aus dem Array die daten zu löschen, die ein x in Spalte 5 haben?
Welches währe die "effizienteste" Variante?
Bitte ohne vorheriger Sortierung. Danke.
AW: Nur bestimmte Daten in ein Array einlesen
26.04.2018 11:12:09
Lutz
Ach so: ich kann nicht mit "usedrange" arbeiten, da das Array für weitere Berechnungen mehr Spalten braucht - daher meine manuelle Angabe in meinem Code.
AW: Nur bestimmte Daten in ein Array einlesen
26.04.2018 11:28:44
Daniel
Hi
ich denke mal, die Daten in ein zweites Array zu übergeben ist einfacher als die Zeilen im Array zu löschen.
für das Löschen von Zeilen im Array gibt es in VBA keine Funktion, dh du müsstest, wenn eine Zeile gelöscht werden soll, per Schleife alle darunter liegenden Werte um einen Index nach oben ziehen.
Da ist es schneller, ein zweites Array neu aufzubauen.
ansonsten, wenn dir schon einfach zwei geschachtelte Schleifen den Kopf schwirren lassen, warum kopierst du nicht die Daten einfach in eine leere Tabelle?
dort kannst du sie dann beliebig bearbeiten (löschen, umsortieren), ohne das die Ausgangsdaten verändert werden.
diese Arbeitsweise sollte für dich mit Excel-gut leichter verständlich sein.

tbl02.Usedrange.copy
With tbl03
.Cells(1, 1).PasteSpecial xlpastevalues
.Columns(5).Replace "x", True
.Columns(5).SpecialCells(xlcelltypeconstants, 4).EntireRow.Delete
ARR_Dat = .Range(.Cells(1, 1), .Cells(.Rows.count, 1).End(xlup).Offset(0, 19)).Value
.Cells.Clear
End with
Gruß Daniel
Anzeige
AW: Nur bestimmte Daten in ein Array einlesen
26.04.2018 11:32:04
Lutz
Ja, natürlich könnte ich die Daten die kein x haben zuvor in eine andere tabelle kopieren.
Da die Daten im Verlauf aber angepasst weren (also die Daten werden nacheinander abgearbeitet und dann mit einem x gekennzeichnet) müsste ich ja jedesmal die Tabelle löschen und neu mit den Daten ohne X befüllen.
Ist das dann nicht aufwendiger als gleich nur die Daten ins array zu übernehmen die kein X haben?
Gruß Lutz
AW: Nur bestimmte Daten in ein Array einlesen
26.04.2018 15:33:36
Daniel
Hi
Es ist sehr einfach, einen Lückenlosen Zellblock in ein Array zu übernehmen: arr = Range(...).Value
Es ist nicht möglich, einen Zellblock mit Lücken in ein Array mit einem Befehl zu übernehmen.
Das muß programmiert werden. Wie das geht, habe ich dir gezeigt.
Entweder liest du dir die Gesamtdaten in ein Array ein und erstellst daraus das gefilterte Array (wie das geht habe ich dir gezeigt)
oder du baust die Daten so um, dass die Zeilen, die ins Array sollen, direkt untereinander stehen.
Das kannst du mit Löschen der Zeilen machen (irreversibel und muss daher in einer Kopie erfolgen) oder durch Sortieren. Excel ist im Sortieren sehr schnell und der Vorgang ist reversibel, dh er kann auch mit den Originaldaten erfolgen (im Schlimmsten Fall muss man die Originalreihenfolge in einer Hilfsspalte sichern, bevor man das erste mal umsortiert)
Gruß Daniel
Anzeige

228 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige