Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
896to900
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
896to900
896to900
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellenvergleich in Schleife abarbeiten

Zellenvergleich in Schleife abarbeiten
13.08.2007 16:52:56
Claudia
Hallo,
ich kenne mich nicht allzugut mit Excel VBA aus, möchte aber einen relativ komplexen Zellenvergleich durchführen:
Mein Tabellenblatt (Ziel) schaut so aus:
Spalte A Spalte B Spalte G
Prod1 Ereignisse Ereignisse
Aktion2 Aktion2
Aktion3 Aktion3
Prod2 Ereignisse Ereignisse
Aktion2 Akt5
Aktion3 lkjkljkl
Aktion4 kljkljkljk
Prod3 Ereignisse Ereignisse
Aktion2 Aktion2
Dort kommen nun Daten aus 50 verschiedenen Dateien herein - der Code besteht - klappt ohne Probleme - auch mit letzter Zeile auslesen und falls die Bereiche unterschiedliche Zeilen haben, wird immer die größere Zeilenanzahl als Maßgabe genommen und bis zur grösseren Anzahl Leerzeilen eingefügt bis zum nächsten Produkt.
Nun möchte ich erreichen, dass Spalte B und Spalte G zeilenweise verglichen wird. Im Prinzip geht das auch - jetzt wird es kompliziert:
Wenn sich in Zeile 3 etwas geändert hat, soll er an dieser Stelle alles eine Zeile nach unten schieben (nur die Werte von Zeile G versteht sich und nur in dem Bereich des Produktes (beispielsweise von Prod2 von Bereich Ereignisse bis zur letzten Zeile vor Ereignisse) so, dass dort eine leere Zelle erscheint...
Mein bisheriger Code:
'--- Vergleicht die Spalte B des Tabellenblattes 1 mit der Spalte G des Tabelenblattes 1 und
Dim i As Integer, j As Integer
'--- Festlegen der Variabeln
EndeB = Worksheets("Tabelle1").Cells(Rows.Count, 2).End(xlUp).row
'--- legt das Ende des ersten Bereiches fest
EndeG = Worksheets("Tabelle1").Cells(Rows.Count, 7).End(xlUp).row
'--- legt das Ende des zweiten Bereiches fest
For i = 3 To EndeB
'--- beginnt bei Zelle 1 und hört bei der letzten ausgefüllten Zelle des Bereiches auf
For j = 3 To EndeG
If Sheets("Tabelle1").Cells(i, 2) Sheets("Tabelle1").Cells(j, 7) Then
'--- wenn nicht finden gelöscht - Leer auf rechter Seite
Dim gesucht As String
Dim z As Integer
gesucht = Sheets("Tabelle1").Cells(i, 2)
For z = 3 To EndeG
MsgBox ("hier eine Zeile nach unten verschieben, wenn nicht gefunden")
Next z
Else
'Sheets("Tabelle1").Cells(j, 2).Interior.ColorIndex = 25
'--- Fortsetzen der Schleife
End If
Next j
Next i
Ich hoffe, es kann mir jemand weiterhelfen!

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellenvergleich in Schleife abarbeiten
14.08.2007 09:56:42
Claudia
Hallo,
Nun, ich beschreibe das Problem etwas genauer in der Hoffnung, dass ich jemanden finde, der mir aus der Verzweiflung helfen kann :-(
Es gibt 50 Produkte. Es besteht je Produkt eine Datei - ein ganz bestimmter Teil der Daten wird nun von jeder dieser 50 in meine Zieldatei (Tabelle1) importiert. Die Daten werden produktweise untereinander geschrieben. Soweit so gut.
Die Produktdateien an sich werden von den Nutzern beschrieben - hier kann es also vorkommen, dass die Zeilen unterschiedlich sind. Die Übertragung der Daten aus den 50 Dateien in meine Zieldatei stellt kein Problem dar. Weiter geht es:
Meine Zieldatei (Tabelle1) sieht so aus:
Produkt (Spalte1)
COI
IC
usw.
Woche1 (Spalte2)
Testphase
exportieren
Test1
Test2
Test3
usw.
Woche2 (Spalte 5)
Testphase
exportieren
Migration
Dokumentation
Test1
Test2
Test3
usw.
Die erste Zeile je Produkt heisst immer "Testphase" - der Ablauf ist im wesentlichen gleich, allerdings ändern die Nutzer auch den Ablauf und dürfen den Ablauf selbst verändern - es geht jetzt um einen Vergleich: wenn in Produkt COI in Zeile 7, Spalte5 (rechten Spalte) nun ein unterschiedlicher Wert steht, so soll geprüft werden, ob der unterschiedliche Wert überhaupt vorhanden ist im Ablauf Spalte2 (links) - ist dieser vorhanden, so sollten die gleichen Werte nebeneinander stehen (herauf-Sortierung). Ist der Wert nicht vorhanden im Ablauf - also gelöscht, dann soll an die Stelle, an der der unterschiedliche Wert auftritt, ein Leerfeld eingefügt werden (beispielsweise in Spalte5, wenn in Spalte2 der Wert unterschiedlich ist, der unterschiedliche Wert wird dann verschoben in das Feld dadrunter, daneben wieder ein Leerfeld).
Die Schleife zum Abarbeiten der Zelle ist an sich vorhanden. Allerdings muss ja innerhalb dieser Schleife nocheinmal abgefragt werden nach dem Bereich ausgehend von dem Wort "Testphase" bis zu dem nächsten Wort "Testphase" - bin ich soweit, dann erfolgt der Zellenvergleich und das eigentliche Verschieben.
Meine bisherige Schleife, die "nur" die Zellen von oben bis unten abarbeitet:
'--- Vergleicht die Spalte B des Tabellenblattes 1 mit der Spalte G des Tabelenblattes 1 und
Dim i As Integer, j As Integer
'--- Festlegen der Variabeln
EndeB = Worksheets("Tabelle1").Cells(Rows.Count, 2).End(xlUp).row
'--- legt das Ende des ersten Bereiches fest
EndeG = Worksheets("Tabelle1").Cells(Rows.Count, 7).End(xlUp).row
'--- legt das Ende des zweiten Bereiches fest
For i = 3 To EndeB
'--- beginnt bei Zelle 1 und hört bei der letzten ausgefüllten Zelle des Bereiches auf
For j = 3 To EndeG
If Sheets("Tabelle1").Cells(i, 2) Sheets("Tabelle1").Cells(j, 7) Then
'--- wenn nicht finden gelöscht - Leer auf rechter Seite
Dim gesucht As String
Dim z As Integer
gesucht = Sheets("Tabelle1").Cells(i, 2)
For z = 3 To EndeG
MsgBox ("hier eine Zeile nach unten verschieben, wenn nicht gefunden")
Next z
Else
'Sheets("Tabelle1").Cells(j, 2).Interior.ColorIndex = 25
'--- Fortsetzen der Schleife
End If
Next j
Next i
Ich hoffe, das Problem ist jetzt etwas verständlicher dargestellt.
Kann hier keiner helfen?

Anzeige
AW: Zellenvergleich in Schleife abarbeiten
16.08.2007 15:43:59
Dani
Hallo Claudia
ein etwas anderer Ansatz währe wenn du direkt nach deinem Begriff suchen würdest das sähe dann ungefähr so aus:

Private Sub CommandButton1_Click()
Dim g As Range
Dim Fundort As Range
Dim Firstaddress As Range
With Worksheets("Tabelle1").Range("A:A")
Set Firstaddress = .Find("Testphase", LookIn:=xlValues)
If Not Firstaddress Is Nothing Then
Set Fundort = .FindNext(Firstaddress)
End If
End With
For Each g In Worksheets("Tabelle1").Range("G" & Firstaddress.Row + 1 & ":G" & Fundort.Row - 1). _
Cells
If g.Value  Worksheets("Tabelle1").Cells(Firstaddress.Row, 2) Then g.Value = 0
Next
End Sub


Gruss
Daniel

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige