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

Prüfen Ersetzen

Prüfen Ersetzen
Koenig
Guten Tag,
vielen Dank nochmal für die Hilfe bei meinen vorherigen Beiträgen. Konnte mit den Tipps gut weiterarbeiten. Ein Problem habe ich noch, ich hoffe das ist nicht zu komplex.
Ich habe eine Tabelle:
https://www.herber.de/bbs/user/70343.xls
hier gibt es 3 Tabellenblätter,
Input Blatt was einen Ausschnitt von Daten zeigt, einmal ein
Paket Blatt und ein
Ergebnis Blatt.
Ich benötige eine Möglichkeit die es mir erlaubt im Ergebnis Blatt die Zeilen wieder auszugeben aber mit folgenden Kriterien:
1. Wenn die kompeltte Code Folge aus einer Zeile aus dem Tabellenblatt Paket in der Input Datei in einem Teil einer Zeile auftaucht, dann gib im Ausgabe Blatt die Zeile aus der Input Datei aus, lösche aber die Code die in der Paket Zeile vorkommen und ersetze Sie durch den neuen Code der hier angegeben ist. (Wenn diese Felder dann leer bleiben ist das OK) Die nicht betroffen Code müssen aber stehen bleiben.
2. Dabei ist aber noch zu beachten, das manche Pakete für alle Zeilen gelten und manche nur für bestimmte Baumuster.
(Jede Zeile aus dem Blatt Paket muss für das gesamte Dokument geprüft werden, die Reihenfolge kann eine andere sein)
Ich habe es über Formeln versucht, bin aber da an die Grenzen geraten. Vielleicht habt ihr ja eine Idee. Wäre super.
Ganz lieben Gruß
und danke schon mal im vorraus
Jens

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
noch eine Rückfrage und ein Code
01.07.2010 00:32:15
Erich
Hi Jens,
was du mit
"2. Dabei ist aber noch zu beachten, das manche Pakete für alle Zeilen gelten und manche nur für bestimmte Baumuster."
schreibst, finde ich in der Beispielmappe nicht wieder. Wie sähen "Pakete für alle Zeilen" aus?
Was ich dort sehe, sind einige Pakete, die für bestimmte Baumuster, aber alle Gebiete gelten.
Das habe ich dann auch berücksichtigt in diesem Code:

Option Explicit
Sub PaketeEinpflegen()
Dim arrP, arrE, rngL As Range
Dim lngQz As Long, lngQs As Long, lngT As Long, lngP As Long
Dim zz As Long, pp As Long, cp As Long, cq As Long
With Sheets("Pakete")
arrP = .Cells(2, 1).Resize( _
.Cells(.Rows.Count, 1).End(xlUp).Row - 1, _
.Cells(1, .Columns.Count).End(xlToLeft).Column)
End With
With Sheets("Input")
lngQz = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Rows(2).Resize(lngQz - 1)
Set rngL = .Find("*", .Cells(1, 1), xlValues, , _
xlByColumns, xlPrevious)
If rngL Is Nothing Then
lngQs = .Cells(1, 1).Column
Else
lngQs = rngL.Column
End If
End With
arrE = .Cells(1, 1).Resize(lngQz, lngQs).Value
For zz = 2 To lngQz
For pp = 1 To UBound(arrP)
If arrP(pp, 2) = arrE(zz, 3) And _
(arrP(pp, 3) = "alle" Or arrP(pp, 3) = arrE(zz, 5)) Then
For lngP = 1 To UBound(arrP, 2)
If IsEmpty(arrP(pp, lngP)) Then
lngP = lngP - 1
Exit For
End If
Next lngP
lngT = 0
For cp = 4 To lngP
For cq = 6 To lngQs
If arrP(pp, cp) = arrE(zz, cq) Then
lngT = lngT + 1
'Debug.Print lngT & " / " & arrP(pp, cp)
Exit For
End If
Next cq
Next cp
If lngT = lngP - 3 Then
lngT = 0
For cq = 1 To lngQs
For cp = 4 To lngP
If arrP(pp, cp) = arrE(zz, cq) Then
lngT = lngT + 1
'Debug.Print lngT & " x " & arrP(pp, cp)
arrE(zz, cq) = IIf(lngT = 1, arrP(pp, 1), "")
Exit For
End If
Next cp
Next cq
End If
End If
Next pp
Next zz
End With
With Sheets("Ausgabe")
.Cells(1, 1).Resize(UBound(arrE), UBound(arrE, 2)) = arrE
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: noch eine Rückfrage und ein Code
01.07.2010 08:46:22
Koenig
Hallo Erich,
vielen herzlichen Dank, ich bin wirklich hin und weg. Ich muss zwar noch ein wenig testen, aber es sieht so aus, als würde genau das Ergebnis heraus kommen, welches ich seit Wochen versuche.
Noch kurz etwas zu dem Punkt zwei. Ein Paket besteht immer für ein Baumuster ein Gebiet und die Code Kombination. Wenn bei Gebiet alle steht, dann wird nur nach dem Baumuster und den Coden geprüft, wenn in der Spalte Gebiet ein Gebiet steht, dann sollte nur auf die Kombination Baumuster, Gebiet und Code geprüft werden und bei vorhanden sein die Code durch den Paket Code ersetz werden.
Ich hoffe ich konnte das so einigermaßen erklären. Wenn Sie da noch eine Idee haben, wäre das super, mit Ihrem Quellcode kann ich aber auch schon mal weiterversuchen. Nochmals herzlichen Dank.
Jens
Anzeige
neue Version
01.07.2010 09:52:12
Erich
Hi Jens, ( wir pflegen hier das Forums-Du :-) )
das mit den Baumustern und Gebieten hatte ich wohl richtig erkannt, so stand es auch im Code, bei "alle".
Hier eine noch etwas berichtigte und verbesserte Version:

Option Explicit
Sub PaketeEinpflegen2()
Dim arrP, arrE, rngL As Range
Dim lngQz As Long, lngQs As Long, lngT As Long, lngP As Long
Dim zz As Long, pp As Long, cp As Long, cq As Long
With Sheets("Pakete")
arrP = .Cells(2, 1).Resize( _
.Cells(.Rows.Count, 1).End(xlUp).Row - 1, _
.Cells(1, .Columns.Count).End(xlToLeft).Column)
End With
With Sheets("Input")
lngQz = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Rows(2).Resize(lngQz - 1)
Set rngL = .Find("*", .Cells(1, 1), xlValues, , _
xlByColumns, xlPrevious)
If rngL Is Nothing Then
lngQs = .Cells(1, 1).Column
Else
lngQs = rngL.Column
End If
End With
arrE = .Cells(1, 1).Resize(lngQz, lngQs).Value
End With
For zz = 2 To lngQz
For pp = 1 To UBound(arrP)
If arrP(pp, 2) = arrE(zz, 3) And _
(arrP(pp, 3) = "alle" Or arrP(pp, 3) = arrE(zz, 5)) Then
For lngP = UBound(arrP, 2) To 0 Step -1
If Not IsEmpty(arrP(pp, lngP)) Then Exit For
Next lngP
lngT = 0
For cp = 4 To lngP
For cq = 6 To lngQs
If arrP(pp, cp) = arrE(zz, cq) Then
lngT = lngT + 1
'Debug.Print lngT & " / " & arrP(pp, cp)
Exit For
End If
Next cq
If lngT 
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: neue Version
06.07.2010 10:51:29
Koenig
Hallo Erich,
habe beide Code ausprobiert. Der erste hat so lange funktioniert, bis ich die Tabelle Input etwas vergrößert habe dann kommt ein Index Fehler, der zweite Code scheint zu laufen bringt aber kein Ergebnis, sondern das Excel funktioniert nicht mehr. Sorry das ich dich damit nochmal belästige, hast du noch eine Idee? Die Seite Datei kann bis zu 10000 Zeilen enthalten und die Pakete Seite bis zu 100 kombinationen. Ist das vielleicht der Grund für den Absturtz.
Vielen Dank
Jens

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige