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

For Each in Array

For Each in Array
12.11.2020 19:23:40
Mani
Guten Abend
ich versuche gerade das arbeiten mit Array zu verstehen bzw wie man das umsetzt oder umsetzen kann.
Ist eine For Each Schleife wie diese :
LetzteZeile = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
Set rngBereich = Range("C1:C" & LetzteZeile)
On Error Resume Next
For Each rngZelle In rngBereich
If rngZelle.Value = "Bestand" Then
rngZelle.Offset(0, 2).Value = "Bestand"
rngZelle.Offset(0, 3).Value = "Bestand"
rngZelle.Offset(0, 6).Value = "Bestand"
rngZelle.Offset(0, 7).Value = "Bestand"
End If
Next
umsetzbar in eine Array?
Wie würde diese aussehen und wenn ja könntet ihr mir die Schritte erläutern ?
Versuche mich da gerade ein wenig reinzudenken und dies geht glaub ich es beste mit einem Beispiel
wo ich die For Each Schleife selber zusammen gesetzt haben und das dann Stück für Stück durchgehe.
Würde mich über Informationen sehr freuen.
Viele Grüße
besten Dank
der Mani

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Each in Array
12.11.2020 20:15:52
onur
Meiner Meinung nach macht es in deinem Falle keinen Sinn, mit Array zu arbeiten, denn:
1) Wenn du einen eindimensionalen Bereich in ein Array packst, wird das Array zweidimensional und "For Each" würde jedes Element des Arrays ansprechen.
2) Du benutzt nicht die Zellen selbst, sondern nur die Nachbarzellen mit Offset - die Adresse der Zellen wäre jedoch im Array futsch.
3) Du solltest besser statt "For Each" und Array einfach die Zeilennumer als Laufvariable einer For-Next-Schleife nehmen:
For ze =1 to LetzteZeile
If cells(ze,3).Value = "Bestand" Then
cells(ze, 5).Value = "Bestand"
cells(ze, 6).Value = "Bestand"
cells(ze, 9).Value = "Bestand"
cells(ze, 10).Value = "Bestand"
End If
Next ze

Wozu
On Error Resume Next ?
Gewöhne dir das ab - Du solltest das NUR anwenden, wenn du einen BESTIMMTEN Fehler an einer BESTIMMTEN Stelle erwartest, aber nicht als "Superpenicillin" gegen alle möglichen Fehler. Es unterdrückt die Symptome (Fehlermeldung), aber der Programmierfehler besteht immer noch und kann dadurch an ganz anderer Stelle ganz ndere Probleme verursachen, und du merkst nicht einmal, warum.
Anzeige
AW: For Each in Array
12.11.2020 20:36:17
Mani
Danke dir
werde ich gleich ausprobieren.
hatte es jetzt so probiert:
Sub Test()
Dim arrTemp As Variant
Dim rngBereich As Range
Dim i As Long
With ActiveSheet
Set rngBereich = .Range(.Range("C1"), .Range("C" & Rows.Count).End(xlUp).Offset(0, 1))
End With
arrTemp = rngBereich
For i = 1 To UBound(arrTemp)
If arrTemp(i, 1) = "Bestand" Then
arrTemp(i, 2) = "Bestand"
arrTemp(i, 4) = "Bestand"
End If
Next
rngBereich = arrTemp
End Sub
Dann wäre als nächstes meine Frage gewesen wie ich nicht nur die Spalte direkt daneben
Offset(0, 1) sondern auch andere anspreche.
Aber das hattest du ja in deiner Antwort erwähnt
Ist mein Ansatz so denn richtig ein Array zu bilden?
Vielen Dank
Beste Grüße
der Mani
Anzeige
AW: For Each in Array
12.11.2020 20:46:42
onur
Du hast EINE Spalte in ein Array gepackt (auch wenn nicht alle Zeilen, aber eine Spalte) - dann kannst du doch nicht versuchen, andere Spalten im Array zu ändern. Arrtemp geht von Arrtemp(1,1) bis Arrtemp(LetzteZeile,1) - es gibt KEIN arrTemp(i, 2).
Wenn schon, dann musst du den GANZEN Bereich (inkl der zu ändernden Zellen) in das Array packen, verändern und danach zurückschreiben. Das würde aber nur Sinn machen bei enorm vielen Datensätzen.
Mit meinem Vorschlag bist du besser bedient, wenn du max ein paar hundert Datensätze hast.
AW: For Each in Array
12.11.2020 20:56:20
Mani
Dein Vorschlag ist besser .
Werde ich auch so umsetzen.
Datensätze habe ich über 8000 aber trotzdem ist dein Ansatz verdammt schnell.
Versuch gerade nur das mit der Array zu verstehen.
Auch über einen größeren Bereich und wie ich das umsetzen könnte.
Vielen Dank
Anzeige
AW: For Each in Array
12.11.2020 21:15:13
Mani
Wie würde das denn aussehen wenn ich die Zeile löschen will?
Leider mit Platzhalter.
LetzteZeile = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
For ze = 1 To LetzteZeile
If Cells(ze, 6).Value = "*Aus*" Then
Cells(ze, 6).EntireRow.Delete
End If
Next ze
Hatte es so probiert nur es funktioniert nicht
AW: For Each in Array
12.11.2020 21:17:17
onur
Kann ich nicht nacvollziehen.
Poste doch mal die (Beispiels-) Datei.
AW: For Each in Array
12.11.2020 21:32:23
Mani
Ich gerade auch nicht weil ich nicht weiß was ich für einen Fehler gemacht habe.
https://www.herber.de/bbs/user/141515.xlsm
Lösche Zeilen mit *Aus*
Ich danke dir schonmal,,
Viele Grüße
der Mani
Anzeige
AW: For Each in Array
12.11.2020 22:41:55
onur
Nur EINEN Fehler? ;)
1) Wenn du in einer Schleife eine Zeile löschst, musst du von unten nach oben anfangen, denn sonst: Index der Schleife ist z.B. bei 4 - du löschst Zeile 4 - Zeile 5 wird sofort zu neuer Zeile 4 und der Code springt beim nächsten Mal in die neue Zeile 5 - also 6 - und die ursprüngliche Zeile 5 wird übersprungen.
2)

If Cells(ze, 2).Value = "*Aus*" Then

Wie kommst du darauf, dass du hier Joker ("*") benutzen darfst ?
AW: For Each in Array
12.11.2020 22:45:02
Mani
Ich danke dir ....
Zu 2 sollte ich über Like gehen ?
Werde es jetzt erstmal überdenken
Anzeige
AW: For Each in Array
12.11.2020 22:46:18
onur
Guckst du hier:
Sub Test()
Dim LetzteZeile As Long
Dim txt
LetzteZeile = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
For ze = LetzteZeile To 2 Step -1
txt = Cells(ze, 2).Text
If InStr(txt, "Aus") > 1 Then
Cells(ze, 2).EntireRow.Delete
End If
Next ze
End Sub

AW: For Each in Array
12.11.2020 22:57:34
Mani
AAAaaahhhhh ,
ich verstehe...
Wieder was gelernt.
Dankeschön
Viele Grüße
der Mani
Gerne !
12.11.2020 23:10:26
onur
AW: For Each in Array
13.11.2020 09:32:03
Daniel
Hi
eine Array-Lösung sieht in Excel immer so aus:
1. kopiere die Zellbereiche in ein Array
2. führe die Bearbeitung der Inhalte im Array durch
3. schreibe das Array in den Zellbereich zurück.
Vorteil ist, dass jeder Zugriff auf eine Zelle langsamer ist als ein Zugriff auf einen Array-Wert und dass das Verändern von Zellwerten in Excel eine Reihe von Hintergrundprozessen auslöst, die beim Verändern von Array-Werten auch nicht ausgeführt werden müssen.
Beim Rückschreiben im Block (alle WErte zusammen) werden diese Hintergrundprozesse dann gemeinsam für alle Zellen ausgeführt anstatt jedes mal für jede Zelle separat, weshalb das ganze wesentlich schneller ist als die Bearbeitung direkt auf dem Blatt.
als Code würde das so aussehen:
dim arr
dim z as Long
dim LetzteZeile as long
LetzteZeile = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
arr = Range("C1:J" & letzteZeile).value
for z = 1 to ubound(arr, 1)
if arr(z, 1) = "Bestand" then
arr(z, 3) = "Bestand
arr(z, 4) = "Bestand"
arr(z, 7) = "Bestand"
arr(z, 8) = "Bestand"
end if
next
Range("C1:J" & letzteZeile).value = arr
Gruß Daniel
Anzeige
AW: For Each in Array
13.11.2020 09:43:32
onur
Und wieso musst du dich auch noch einmischen und auch noch das von mir bereits gesagte wiederholen?
AW: For Each in Array
13.11.2020 09:43:32
onur
Und wieso musst du dich auch noch einmischen und auch noch das von mir bereits gesagte wiederholen?
AW: For Each in Array
13.11.2020 09:43:33
onur
Und wieso musst du dich auch noch einmischen und auch noch das von mir bereits gesagte wiederholen?
AW: For Each in Array
13.11.2020 09:43:35
onur
Und wieso musst du dich auch noch einmischen und auch noch das von mir bereits gesagte wiederholen?
AW: For Each in Array
13.11.2020 10:42:45
Daniel
naja du hattest doch geschrieben (wenn ich dich dich kurz zitieren darf)
"Meiner Meinung nach macht es in deinem Falle keinen Sinn, mit Array zu arbeiten, denn:"
du räts ihm explizit von dem Verwenden von Arrays ab.
mir jetzt vorzuwerfen, ich würde dich wiederholen ist absurd.
Anzeige
AW: For Each in Array
13.11.2020 10:56:11
onur
Ich hatte ihm bereits geschrieben, wie man das mit Arrays macht und ihm eine einfachere Version angeboten, die, wie er zugab, absolut schnell genug war. Der Thread war also erledigt.
AW: For Each in Array
13.11.2020 10:56:11
onur
Ich hatte ihm bereits geschrieben, wie man das mit Arrays macht und ihm eine einfachere Version angeboten, die, wie er zugab, absolut schnell genug war. Der Thread war also erledigt.
AW: For Each in Array
13.11.2020 10:56:12
onur
Ich hatte ihm bereits geschrieben, wie man das mit Arrays macht und ihm eine einfachere Version angeboten, die, wie er zugab, absolut schnell genug war. Der Thread war also erledigt.
AW: For Each in Array
13.11.2020 10:56:14
onur
Ich hatte ihm bereits geschrieben, wie man das mit Arrays macht und ihm eine einfachere Version angeboten, die, wie er zugab, absolut schnell genug war. Der Thread war also erledigt.
Anzeige
AW: For Each in Array
13.11.2020 10:56:15
onur
Ich hatte ihm bereits geschrieben, wie man das mit Arrays macht und ihm eine einfachere Version angeboten, die, wie er zugab, absolut schnell genug war. Der Thread war also erledigt.
AW: For Each in Array
13.11.2020 11:07:06
Daniel
in diesem Thread?
zeig mal bitte wo genau.
warum stellst du deine Beiträge eigentlich mehrfach ein?
AW: For Each in Array
13.11.2020 12:43:30
onur
Gestern 20:46 und die Antwort kurz später usw.
AW: For Each in Array
13.11.2020 13:05:16
Daniel
kann passieren, so what.
AW: For Each in Array
13.11.2020 13:06:06
onur
Kein Problem.

181 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige