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

Forumthread: Zellen eines variablen Bereiches prüfen

Zellen eines variablen Bereiches prüfen
25.09.2022 12:02:35
Anna
Hallo alle zusammen,
ich habe eine Tabelle, die automatisch mit Werten aus einem anderen Tabellenblatt gefüllt wird. Jede Zeile beinhaltet Kennzahlen für das jeweilige Produkt. Wird ein Produkt hinzugefügt, verlängert sich die Tabelle um eine zeile, sodass die Tabelle unterschiedlich lang sein kann. Die Tabelle hat 12 Spalten (A:L). Nun möchte ich die Werte in den Spalten B:L prüfen, wobei erst ab der Zeile 13 geprüft werden soll. In Spalte A befindet sich die Nummerierung der Produkte. Liegt der Wert unterhalb von 4, soll dieser Wert und die Nummerierung in ein anderes Tabellenblatt übernommen. Außerdem soll die Produkteigenschaft, bei dem der Wert unter 4 liegt ebenfalls in das andere Tabellenblatt übernommen werden, daher die Variable n (Produkteigenschaft ist in Zeile 12 angegeben). Mein Ansatz ist mit zwei For Schleifen zu arbeiten, wobei die eine Schleife die Zeilen bis zur letzten gefüllten Zeile hochzählt. Die zweite Schleife prüft die Zellen der jeweiligen Zeile. Das Problem ist, dass der Code für die erste Zeile (r= 13) funktioniert, danach aber leider nicht mehr. Dann werden die Werte nicht korrekt oder gar nicht übernommen. Außerdem wird die Variable n nicht hochgezählt. Hier mein Code. Über eure Hilfe freue ich mich! VG

Sub Maßnahmen()
Dim zeile As Integer
Dim zelle As Variant
Dim r As Integer
Dim n As Integer
Sheets("Diagramm").Select
zeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Maßnahmen").Range("B21:J1000").ClearContents
With Sheets("Diagramm")
n = 1
For r = 13 To zeile
For Each zelle In ActiveSheet.Range(Cells(r, 2), Cells(r, 12))
If zelle 
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen eines variablen Bereiches prüfen
26.09.2022 13:16:16
ChrisL
Hi Anna
Eine Beispieldatei mit Ist- und Sollzustand hilft fürs Verständnis und erspart das Nachbauen der Mappe.
Ich denke das Hauptproblem liegt darin, dass du nach dem Übertrag nicht in die Tabelle "Diagramm" zurückgesprungen bist. Zudem müsste der Zähler n in die Schleife integriert werden.
Der Zweck von Cells(zelle.Row - n, zelle.Column) war mir nicht ganz klar. Ich vermute du möchtest einen Titel aus Zeile 12 übernehmen.
Ich habe versucht das ursprüngliche Makro vom Prinzip her beizubehalten, damit du eine Wiedererkennung hast.

Sub t()
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim r As Long, letzteZeile As Long
Dim zelle As Range
Set wksQuelle = Worksheets("Diagramm")
Set wksZiel = Worksheets("Maßnahmen")
wksZiel.Range("B21:J1000").ClearContents
With wksQuelle
For r = 13 To .Cells(.Rows.Count, 1).End(xlUp).Row
For Each zelle In .Range(.Cells(r, 2), .Cells(r, 12))
If zelle 
cu
Chris
Anzeige
AW: Zellen eines variablen Bereiches prüfen
27.09.2022 09:22:34
Anna
Hi,
Danke ChrisL, Danke Yal, beiden Vorschläge von euch funktionieren!
Ich habe mich aufgrund des ursprünglichen Prinzips für die Lösung von ChrisL entschieden.
Könnte man eventuell noch in den Code integrieren, dass, wenn die letzteZeile die Zeile 41 erreicht, dass die Schleife anfängt die Werte in die Spalte 11 einzutragen? Damit möchte ich vermeiden, dass die Auflistung in der Zielmappe zu lang wird.
Ich habe es mit so probiert, klappt aber nicht:

With wksQuelle
For r = 13 To .Cells(.Rows.Count, 1).End(xlUp).row
For Each zelle In .Range(.Cells(r, 2), .Cells(r, 12))
If zelle letzteZeile = wksZiel.Cells(.Rows.Count, 4).End(xlUp).row + 1
If .Rows.Count = 41 Then
letzteZeile = wksZiel.Cells(.Rows.Count, 11).End(xlUp).row + 1
Else
(der restliche Code)
Viele Grüße
Anzeige
AW: Zellen eines variablen Bereiches prüfen
27.09.2022 10:13:12
ChrisL
Hi
If .Rows.Count = 41 Then
Rows.Count wäre die maximale Anzahl Zeilen, also 1 Mio. oder so. Hingegen wäre die Variable letzteZeile das entscheidende Kriterium.
Nur müsste dann die Spalte für die Ermittlung der letzten Zeile auch verschoben werden, was die Angelegenheit kompliziert macht. Ich würde daher den Prozess wie gehabt durchlaufen lassen und einfach zum Schluss noch ein Cut/Paste ab Zeile 41 zur neuen Position einfügen. Müsstest nicht einmal prüfen wie viele Zeilen es gibt, sondern einfach ein prophylaktisches Cut/Paste einfügen.
Natürlich nicht ganz die feine Art, aber leicht zu realisieren.
cu
Chris
Anzeige
AW: Zellen eines variablen Bereiches prüfen
28.09.2022 18:44:22
Anna
Hi,
Danke, hat geklappt!
VG Anna
AW: Zellen eines variablen Bereiches prüfen
26.09.2022 13:34:34
Yal
Hallo Anna,
vieles zusammengebracht, aber nicht so richtig verstanden, warum. So haben wir alle angefangen :-)
Wenn deine Quell- und Zielworksheet bekannt sind, dann nutze Variable dafür "ActiveSheet" ist da zu ungenau.
Das Gleich für Zelle: ActiveCell ist bäh! Vor allem, wenn Du einen Offset+ Select macht: dein Code ist kaum zu begreifen. Ich glaube verstanden zu haben, dass für jede Zelle in der Quelle, 3 Zellen im Ziel befüllt werden sollten: Wert, Überschrift, Klasse (A,B,C)
Und zwischen "With" und "End With" sollten Elemente darauf referieren, also mit einem Punkt anfangen.

Sub Maßnahmen()
Dim wsQ As Worksheet ' Q wie Quelle
Dim wsZ As Worksheet 'Z wie Ziel
Dim QZeile 'Quell-Zeile
Dim Sp As Long
Dim NeueZielZeile As Range
Set wsQ = Worksheets("Diagramm")
Set wsZ = Sheets("Maßnahmen")
wsQ.Activate
wsZ.Range("B21:J1000").ClearContents
For QZeile = 13 To wsQ.Cells(Rows.Count, 1).End(xlUp).Row
Set NeueZielZeile = wsZ.Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).EntireRow 'nimm die ganze Zeile als Ref.
For Sp = 2 To 12
If wsQ.Cells(QZeile, Sp).Value 
VG
Yal
Anzeige
AW: Zellen eines variablen Bereiches prüfen
26.09.2022 14:05:31
GerdL
Hallo Yal,
fehlt für "R.Value" die Wertzuweisung?
Gruß Gerd
AW: Zellen eines variablen Bereiches prüfen
26.09.2022 14:16:51
Yal
Hallo Gerd,
Ups! Der Wert der Quell-Zelle sollte es ein.

Sub Maßnahmen()
Dim wsQ As Worksheet ' Q wie Quelle
Dim wsZ As Worksheet 'Z wie Ziel
Dim QZeile 'Quell-Zeile
Dim Sp As Long
Dim NeueZielZeile As Range
Set wsQ = Worksheets("Diagramm")
Set wsZ = Sheets("Maßnahmen")
wsQ.Activate
wsZ.Range("B21:J1000").ClearContents
For QZeile = 13 To wsQ.Cells(Rows.Count, 1).End(xlUp).Row
Set NeueZielZeile = wsZ.Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).EntireRow 'nimm die ganze Zeile als Ref.
For Sp = 2 To 12
If wsQ.Cells(QZeile, Sp).Value 
VG
Yal
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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