Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1488to1492
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üfbedingungen Spaltenvergleich Ausgabe

Prüfbedingungen Spaltenvergleich Ausgabe
02.05.2016 15:01:22
lubebi91
Hallo liebe Experten,
ich habe einen Code, der mir in Tabellenblatt "Sheet1" die Spalte H mit einer Spalte A in "Sheet2" vergleicht und anschließend (im Falle einer Übereinstimmung) die zu den Zeilen in Spalte A gehörenden Codes (stehen in Spalte D) neben Spalte H in I kopiert. (bis zu 15.000 Zellen Datenvolumen)
Die zu vergleichenden Spalten enthalten 3 stellige Ziffern, die zuzuweisenden Codes sind _
Buchstabencodes (dreistellig). Mit diesem Code funktioniert das soweit auch.

Sub Vergleich()
Dim rngQuelle As Range
Dim rngZiel As Range
With ThisWorkbook.Sheets("Sheet1")
For Each rngZiel In .Range("H1:H" & .Cells(.Rows.Count, 2).End(xlUp).Row)
On Error Resume Next
Set rngQuelle = ThisWorkbook.Sheets("Sheet2").Range("A:K").Find(What:=rngZiel)
On Error GoTo 0
If Not rngQuelle Is Nothing Then
rngQuelle.Offset(0, 4).Resize(1, 1).Copy
rngZiel.Offset(0, 1).Resize(1, 1).PasteSpecial Paste:=xlPasteValues
End If
Next 'rngZiel
End With
End Sub

Jetzt zu meinem Problem. Da ich absoluter Neuling bin und ich diesen Code quasi so gefunden habe und nur die Namen anzupassen hatte war dies ein leichtes. Nun möchte ich aber folgendes gerne tun:
Es soll eine Prüfbedingung angefügt werden. In "Sheet2" stehen bspw. in Spalte G Textbausteine, die den dreistelligen Buchstabencode näher beschreiben. In "Sheet1" stehen in Spalte I ebenfalls Textbausteine, die diese Zahlencodes beschreiben. Nun soll also ein zusätzlicher, verknüpfender Vergleich stattfinden, sodass nur kopiert wird, wenn auch die Texte übereinstimmen. Diese können gänzlich abweichen, sich in Teilen ähneln oder komplett übereinstimmen. Nur wenn sie gänzlich abweichen soll nichts passieren, ansonsten wieder das obige passieren, also die Buchstabencodes gemappt werden.
Bsp. zur Verdeutlichung:
Ausgangssituation ->
Sheet1
H I (340 usw. in Spalte H, Texte in Spalte I usw.)
340 "Sonnenfinsternis"
421 "Klima"
455 "Affe"
Sheet2
A D G (ADG sind Spalten)
340 BAR "Heute ist Sonnenfinsternis"
421 ZBO "Klimaanlage"
455 TXO "Mensch
Ausgabe:
Sheet1 (HIJ sind Spalten)
H I J
340 "Sonnenfinsternis" BAR
421 "Klima" ZBO
455 "Affe"
Sheet2
A D G (ADG sind Spalten)
340 HIJ "Heute ist Sonnenfinsternis"
421 ZBO "Klimaanlage"
455 TXO "Mensch"
Danke für die Hilfe.
Grüße

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

Betreff
Datum
Anwender
Anzeige
AW: Prüfbedingungen Spaltenvergleich Ausgabe
02.05.2016 20:04:14
Piet
Hallo,
anbei ein Code von mir der eine machbare Lösung zeigt. Er muss aber noch mal im Kopier Modus geaendert werden.
Einige Dinge sind mir noch unklar? Widersprüchlich?
Ich habe verstanden das z.B. Text Sonnenfinsternis in Sheet1 in Spalte I steht, bei Sheet 2 aber in G
Unklar ist mir der Suchlauf: - Sheets("Sheet2").Range("A:K"), denn Spalte K geht über Spalte G hinaus!
Darunter kommt die Kopie Anweisung: - rngQuelle.Offset(0, 4).Resize(1, 1).Copy
Das verstehe ich nicht so ganz, denn wenn ich von A:K suche, wie will ich mit Offset(0,4) die Spalte G treffen?
Der gefundene Wert müsste dann ja -immer in der Spalte C stehen-, sonst kann Offset(0,4) nicht stimmen!!
Da ist für mich etwas unklar. Bitte selbst prüfen.
Weiter wird kopiert mit Code: - rngZiel.Offset(0, 1).Resize(1, 1).PasteSpecial. Auf Resize(1,1) kann man ganz verzichten.
Stutzig macht mich Offset(0, 1). denn wenn ich das richtig sehe stehe ich mit rngZiel in Spalte "H"! das heisst, ich kopiere
jetzt in die Spalte I. - Ist das richtig? Ich denke das in Spalte I Werte zum vergleichen stehen. Die werden mit dem Code überschrieben. Ich bitte den Teil selbst noch einmal zu prüfen.
Ich hoffe das meine gedankliche Anregung aber grundsaetzlich weiter hilft. Würde mich freuen.
mfg Piet


Sub Vergleich()
Dim rngQuelle As Range
Dim rngZiel As Range
Dim Sht2 As Object
Dim QuellTxt As String
Dim ZielTxt As String
Set Sht2 = ThisWorkbook.Sheets("Sheet2")
With ThisWorkbook.Sheets("Sheet1")
For Each rngZiel In .Range("H1:H" & .Cells(.Rows.Count, 2).End(xlUp).Row)
Set rngQuelle = Sht2.Range("A:K").Find(What:=rngZiel)
If Not rngQuelle Is Nothing Then
'Quell + Ziel Texte zum vergleicenh laden
ZielTxt = rngZiel.Offset(0, 1).Value        'Spalte I
QuellTxt = Sht2.Cells(rngQuelle.Row, "G")   'Spalte G
'nur kopieren wenn Texte ganz oder teilweise übereinstimmen
If InStr(QuellTxt, ZielTxt) Or InStr(ZielTxt, QuellTxt) Then
rngQuelle.Offset(0, 4).Resize(1, 1).Copy
rngZiel.Offset(0, 1).Resize(1, 1).PasteSpecial Paste:=xlPasteValues
End If
End If
Next 'rngZiel
End With
End Sub

Anzeige
AW: Prüfbedingungen Spaltenvergleich Ausgabe
04.05.2016 10:03:33
lubebi91
Hallo Piet,
erstmal vielen Dank für deine Antwort samt Code!
Ich habe mit deinem Code etwas rumgespielt, leider passiert nichts. Diese angesprochene Offset Geschichte verstehe ich leider auch nicht richtig: rngQuelle.Offset(0, 4).Copy Das heißt doch dass er die 4. Spalte rechts von Spalte "A" kopiert? In Spalte D stehen die zu kopierenden Codes wie ich es am Beispiel versucht habe zu verdeutlichen. Also Spalte H (Sheet1) soll zunächst mit Spalte G(Sheet2) abgeglichen werden (dreistelligen Zahlencodes). Gleichzeitig soll der zu Spalte (H) gehörende Langtext (befindet sich in Spalte I) mit Spalte G (Sheet2) verglichen werden (wiegesagt auch ungefähre Übereinstimmungen sollen als wahr angesehen werden). Wenn Zahl und Text übereinstimmt, soll der zu den Zahlencodes in Sheet2 gehörende Textcode (dreistellig, siehe Beispiel oben) aus Spalte D (Sheet2) in Spalte (J, also neben den Langtext in Sheet1) hineinkopiert werden =).
Wäre sehr sehr nett, wenn du mir sagen könntest wo der Fehler noch liegt, was ich ggf. noch anpassen muss.
LG

Anzeige
AW: Prüfbedingungen Spaltenvergleich Ausgabe
04.05.2016 10:05:51
lubebi91
-Sry soll heißen
:"Also Spalte H (Sheet1) soll zunächst mit Spalte A(Sheet2) abgeglichen werden (dreistelligen Zahlencodes) ...

AW: Prüfbedingungen Spaltenvergleich Ausgabe
04.05.2016 22:26:44
Piet
Hallo,
am besten ist eine kleine Beispieldatei Sheet 1+2 wo die Daten in den Spalten sichtbar sind.
Mit kopierten Daten, die du am besten als "kopiert" farblich markierst. Geht am schnellsten!
In der Beschreibung habe ich noch mehrere Widersprüche die mich verwirren, deshalb weiss ich
im Augenblick nicht konkret was geandert werden muss? Und ob das Original funktioniert hat?
Das Original Makro ist m.E. ebenfalls unstimmig? - Ohne Beispieldatei kann ich da nur raten?
siehe hier: - rngQuelle.Offset(0, 4).Resize(1, 1).Copy
Steht der dreistellige Code in Spalte G dann versucht obiger Code die Spalte K zu kopieren!
Die zu kopierenden Daten sollen aber doch in Spalte D stehen? - Das Verwirrt mich total!
Ich bitte höflich um eine kleine Beispieldatei mit zwei Sheets und die drei Beispieldaten.
Statt Zeile 340 sollten sie in Zeile 3-4 stehen. Bitte mit Spaltenüberschrift, damit ich
sehe ab wo der Suchlauf beginnen soll. Das geht schneller als es per Text zu erklaeren.
Vor allem weiss ich dann konkret was ich programmieren muss.
mfg Piet

Anzeige
AW: Prüfbedingungen Spaltenvergleich Ausgabe
05.05.2016 16:21:02
Piet
Hallo,
ich habe den VBA Code noch einmal gemaess den letzten Angaben geaendert
und hoffe das er so funktioniert. Wenn nicht bitte eine Beispieldatei hochladen.
mfg Piet
Option Explicit      'neuer Code nach letzten Angaben
'QuellText aus Sheet2 Spalte D kopieren nach Sheet1 Spalte j
Sub Vergleich_Neu()
Dim rngQuelle As Range
Dim rngZiel As Range
Dim Sht2 As Object
Dim QuellTxt As String
Dim ZielTxt As String
Set Sht2 = ThisWorkbook.Sheets("Sheet2")
With ThisWorkbook.Sheets("Sheet1")
For Each rngZiel In .Range("H1:H" & .Cells(.Rows.Count, 2).End(xlUp).Row)
Set rngQuelle = Sht2.Range("G:G").Find(What:=rngZiel, LookAt:=xlWhole)
If Not rngQuelle Is Nothing Then
'Quell + Ziel Texte zum vergleicenh laden
ZielTxt = rngZiel.Offset(0, 1).Value        'Spalte I  (Sheet1)
QuellTxt = Sht2.Cells(rngQuelle.Row, "D")   'Spalte D  (Sheet2)
'nur kopieren wenn Texte ganz oder teilweise übereinstimmen
If InStr(QuellTxt, ZielTxt) Or InStr(ZielTxt, QuellTxt) Then
'kopiere QuellTxt in Spalte J  (Sheet1)
rngZiel.Offset(0, -1) = QuellTxt
End If
End If
Next
End With
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige