Anzeige
Archiv - Navigation
1624to1628
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

Mal wieder: Doppelte entfernen

Mal wieder: Doppelte entfernen
15.05.2018 16:15:52
Lanala
Hallo,
da mir erst vorkurzem so gut geholfen wurde habe ich Hoffnung dass es wieder klappt :). Hab schon im Forum recherchiert aber leider keine passende Lösung gefunden. Jedenfalls keine die ich auch verstanden hab. Hier mal eine Beispieldatei.
https://www.herber.de/bbs/user/121620.xlsx
Mir geht es vorallem um die RT[min] und Max. m/z Werte. Es sollen alle RT und Max. m/z Wertepaare in Tabelle 1 kopiert werden die nur einmal vorkommen (mit einer Toleranz von +-0,1 für Max. m/z). Das am besten für den Datensatz XXX und XXX2.
Kommt ein Wertepaar zweimal vor, soll nur ein der Wertepaar in Tabelle 1 erscheinen.
Würde das irgendwie gehen? oder denke ich da zu kompliziert? Freue mich über Hilfestellung da ich mich leider mit Makros garnicht auskenne.
Ich danke schonmal im voraus.
lg Lanala

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mal wieder: Doppelte entfernen
15.05.2018 16:27:40
ChrisL
Hi
https://www.herber.de/cgi-bin/callthread.pl?index=1623291
Die Wertpaare wurden ja bereits ermittelt. Wenn ich dich richtig verstehe, müsstest du auf dem Ergebnis nur noch die Duplikate entfernen (=Standardfunktion).
cu
Chris
AW: Mal wieder: Doppelte entfernen
16.05.2018 11:05:54
lanala
Hallo Chris,
ja das mit den Wertepaaren aus XXX und XXX2 ermitteln funktioniert super. Vielen dank nochmal dafür.
Jetzt würde ich allerdings gern vorher Werte mit gleicher RT und gleicher Max m/z sowohl aus XXX als auch aus XXX2 entfernen bevor ich die Datensätze miteinander Vergleiche. Das allerdings mit einer Tolenranz von +-0.1 für Max m/z.
Das geht soweit ich das jetzt ausprobiert habe mit der Standardfunktion von Excel leider nicht.
lg lanala
Anzeige
AW: Mal wieder: Doppelte entfernen
16.05.2018 13:24:13
ChrisL
Hi
Mit meinem Verweis auf den alten Beitrag wollte ich keine Extralorbeeren ernten (so gut war das Makro auch wieder nicht ;) sondern darauf hinweisen, dass man das Rad nicht immer neu erfinden muss. Ggf. wäre sogar eine Kombination der beiden Prozesse hilfreich (Performance).
Auch stellt sich die Frage, ob man Rohdaten wirklich Manipulieren/Löschen will oder ob man die Ergebnisse nicht besser in der Auswertung aussondert.
Bei genauerer Betrachtung war es dann doch nicht ganz so trivial, daher ist die Trennung der beiden Themen vielleicht ganz gut so.
Sub tt()
Dim arrDB1() As Variant, arrDB2() As Variant
Dim lngZeile1 As Long, lngZeile2 As Long, b As Boolean
ReDim arrDB1(3 To Cells(Rows.Count, 3).End(xlUp).Row)
ReDim arrDB2(3 To Cells(Rows.Count, 9).End(xlUp).Row)
Application.ScreenUpdating = False
For lngZeile1 = Cells(Rows.Count, 3).End(xlUp).Row To 3 Step -1
b = False
For lngZeile2 = Cells(Rows.Count, 9).End(xlUp).Row To 3 Step -1
If Cells(lngZeile1, 3) - 0.1 = Cells(lngZeile2, 9) And _
Cells(lngZeile1, 6) - 0.1 = Cells(lngZeile2, 12) Then
b = True
arrDB2(lngZeile2) = True
End If
Next lngZeile2
If b Then arrDB1(lngZeile1) = True
Next lngZeile1
For lngZeile1 = Cells(Rows.Count, 3).End(xlUp).Row To 3 Step -1
If arrDB1(lngZeile1) Then Range(Cells(lngZeile1, 2), Cells(lngZeile1, 6)).Delete shift:=xlUp
Next lngZeile1
For lngZeile2 = Cells(Rows.Count, 9).End(xlUp).Row To 3 Step -1
If arrDB2(lngZeile2) Then Range(Cells(lngZeile2, 8), Cells(lngZeile2, 12)).Delete shift:=xlUp
Next lngZeile2
End Sub
cu
Chris
Anzeige
AW: Mal wieder: Doppelte entfernen
16.05.2018 13:46:45
lanala
Hey Chris,
:) das mit den Extralorbeeren ist mir schon klar. Wollt trotzdem nochmal danke sagen. Das Ding ist, ich hab viel mehr Daten als jetzt in der Tabelle angegeben.
Er scheint Sachen rauszuwerfen. Allerdings bleiben in Zeile 60/61 bei XXX
60 1,8 27663634 9,2 446,08
61 1,8 27663634 9,2 446,08
stehen. Das ist mir jetzt nur auf den ersten Blick eingefallen. Ob sich noch andere Wiederholen hab ich jetzt auf die schnelle nicht gesehen. Eine Ahnung woran es liegen kann? gibt es eine Möglichkeit die Werte in ein anderes Blatt zu schreiben?
Lieben Gruß
Lanala
zurück auf Feld 1
16.05.2018 14:09:26
ChrisL
Hi
Meine Interpretation war, dass du Wertpaare zwischen DB1 und DB2 abgleichen willst und löschen willst. Daher werden Wertpaare innerhalb der gleichen DB ignoriert, wenn es keine Übereinstimmung mit DB2 gibt.
Willst du jetzt Wertpaare innerhalb der DB1 ermitteln/löschen. Und dann das gleiche nochmal in DB2, aber ohne Bezug zwischen den beiden DB's?
In folgendem Beispiel (3x innerhalb Toleranz 0,1):
...
1,00001
1,00002
1,00003
...
Sollen jetzt alle 3 Werte gelöscht werden oder welcher bleibt stehen?
In folgendem Beispiel (1 bildet Wertpaar zu 2, 2 zu 3, aber 1 nicht zu 3):
...
1,0
1,08
1,16
...
Und jetzt?
cu
Chris
Anzeige
AW: Verwirrung
16.05.2018 14:40:56
lanala
hey Chris,
also ich hab ja zwei Datensätze xxx und xxx2.
Er soll den Datensatz von XXX auf doppelte Prüfen. Dabei geht es um die Reihen C (RT [min]) und F (Max. m/z) als Datenpaare. Sind sowohl RT als auch Max. m/z in den Reihen von XXX gleich, dann sollte er eins davon rausschmeißen. Dies soll mit einer Toleranz in Max. m/z von 0.1 passieren.
Zu deinem Beispielen:
(3x innerhalb Toleranz 0,1):
...
1,00001
1,00002
1,00003

hier Bitte den ersten Wert stehen lassen.
zum nächsten

(1 bildet Wertpaar zu 2, 2 zu 3, aber 1 nicht zu 3):
...
1,0
1,08
1,16

das sollte Hoffentlich nicht passieren ^^. sonst müsste ich irgendwie die Toleranz erhöhen. Aber 3 gleich hab ich jetzt auf den ersten und zweiten Blick nicht gesehen.
Sry wenn ich mich etwas umständlich ausgedrückt habe und für Verwirrung gesorgt habe ^^
lg lanala
Anzeige
neuer Versuch
16.05.2018 15:58:37
ChrisL
Hi
OK, hier das Makro, aber du müsstest nochmals genau prüfen, ob es das macht, was du willst.
Stichprobenmässig habe ich geprüft, warum Datensatz 670 und 671 gelöscht werden. Dies liegt daran, dass Datensatz 643 ebenfalls in der Toleranz liegt.
Weiter habe ich dann nicht mehr geschaut, aber ich denke du hast mehrere Überschneidungen von 3 und mehr Datensätzen. Wenn dann müsstest du die Toleranz reduzieren und nicht erhöhen.
Sub Mach()
Call DelDupli(2, 6)
Call DelDupli(8, 12)
End Sub

Private Sub DelDupli(lngSpalte1 As Long, lngSpalte2 As Long)
Dim lngZeile1 As Long, lngZeile2 As Long
Application.ScreenUpdating = True
For lngZeile1 = Cells(Rows.Count, lngSpalte1).End(xlUp).Row To 4 Step -1
For lngZeile2 = lngZeile1 - 1 To 3 Step -1
If Cells(lngZeile1, lngSpalte1 + 1) - 0.1 = Cells(lngZeile2, lngSpalte1 + 1) And _
Cells(lngZeile1, lngSpalte2) - 0.1 = Cells(lngZeile2, lngSpalte2) Then
Range(Cells(lngZeile1, lngSpalte1), Cells(lngZeile1, lngSpalte2)).Delete Shift:=xlUp
Exit For
End If
Next lngZeile2
Next lngZeile1
End Sub
cu
Chris
Anzeige
AW: Datensätze mit Kriterien ausdünnen
17.05.2018 11:36:00
fcs
Hallo Ianala,
ich hab jetzt mal ein Makro erstellt, das deine Randbedingungen erfüllen sollte.
Gruß
Franz
Sub Daten_Aufbereiten()
Dim wksQuelle As Worksheet, wksZiel As Worksheet
Dim rngDaten As Range
Dim arrDaten, arrErgebnis()
Dim varMaxm_z, varRT_min, varDS
Dim Zeile As Long, Zeile_L As Long
Dim Spalte_Q As Long, Spalte As Long
Set wksQuelle = ActiveWorkbook.Worksheets(1) 'Sheet1
Set wksZiel = ActiveWorkbook.Worksheets(2) 'Tabelle1
With wksQuelle
'Datensätze in Quell-Blatt abarbeiten - ab Spalte B in 6er-Schritten
For Spalte_Q = 2 To .Cells(2, .Columns.Count).End(xlToLeft).Column Step 6
varDS = .Cells(1, Spalte_Q).Value 'Bezeichnung des Datensatzes merken
'Datenzeilen des Datensates sortieren und in Daten-Array einlesen
Zeile_L = .Cells(.Rows.Count, Spalte_Q).End(xlUp).Row
Set rngDaten = .Range(.Cells(2, Spalte_Q), .Cells(Zeile_L, Spalte_Q + 4))
With rngDaten
'sortieren nach "RT [min]" und "Max. m/z"
.Sort Key1:=.Range("B1"), order1:=xlAscending, key2:=.Range("E1"), _
Order2:=xlAscending, Header:=xlYes
'sortierte Daten inkl. Spaltentitel in Array einlesen
arrDaten = .Value2
'sortieren nach "#" - ursprüngliche Sortierung wieder herstellen
.Sort Key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
End With
'im Daten-Array doppelte Datenzeilen markieren
varRT_min = "": varMaxm_z = "": Zeile_L = 1
For Zeile = LBound(arrDaten, 1) + 1 To UBound(arrDaten, 1)
'Prüfen, ob Werte in Spalte "RT [min]" sich ändert
If varRT_min  arrDaten(Zeile, 2) Then
'Werte merken von "RT [min]" und "Max. m/z" - Zeile nicht als doppelt markieren
varRT_min = arrDaten(Zeile, 2)
varMaxm_z = arrDaten(Zeile, 5)
Zeile_L = Zeile_L + 1
Else
'Prüfen, ob Wert in "Max. m/z" innerhalb der Toleranz zum gemerkten Wert
If arrDaten(Zeile, 5) - varMaxm_z  "D" Then
Zeile_L = Zeile_L + 1
For Spalte = LBound(arrDaten, 2) To UBound(arrDaten, 2)
arrErgebnis(Zeile_L, Spalte) = arrDaten(Zeile, Spalte)
Next
End If
Next
'Ergebnis-Daten im Zielblatt eintragen
With wksZiel
'Datensatz-Beschreibung eintragen in Zeile 1
.Cells(1, Spalte_Q).Value = varDS
'nicht doppelte Daten in Zielblatt eintragen
.Cells(2, Spalte_Q).Resize(Zeile_L, 5) = arrErgebnis
'Zeilen des Datensatzen nach "#" sortieren
Zeile_L = .Cells(.Rows.Count, Spalte_Q).End(xlUp).Row
Set rngDaten = .Range(.Cells(2, Spalte_Q), .Cells(Zeile_L, Spalte_Q + 4))
With rngDaten
'sortieren nach "#"
.Sort Key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
End With
End With
Erase arrDaten, arrErgebnis 'Daten-Arrays zuücksetzen/leeren
Next Spalte_Q
End With
wksZiel.Activate
End Sub

Anzeige
AW: mit der Funktion Duplikate entfernen ...
15.05.2018 16:32:55
neopa
Hallo Lanala,
... am einfachsten zunächst Deine Daten nach Tabelle1 kopieren und dann nutze die Funktion Duplikate entfernen. Dazu markiere in Tabelle1 zuvor den jeweilgen Datenbereich und nimm das Häkchen bei den Spaltenüberschriften heraus, die nicht berücksichtigt werden sollen, lso "#", "Area" und "S/N".
Gruß Werner
.. , - ...
AW: mit der Funktion Duplikate entfernen ...
16.05.2018 11:07:50
lanala
Hallo Werner,
naja, Duplikate entfernen bringt mir glaub ich nichts. Ich schaff es nicht da irgendwie einen Toleranz Bereich angeben zu können. Die Werte Max. m/z sollen ja mit einer Toleranz von +-0.1 gelöscht werden.
lg lanala
AW: da hast Du natürlich Recht ...
16.05.2018 11:33:38
neopa
Hallo Lanala,
... sorry, da hab ich wohl mehrfach übersehen, dass Du ja einen Toleranzbereich berücksichtigt haben möchtest. Wenn es nur eine einmalige Angelegenheit ist, dann nutze den Vorschlag von Franz.
Wenn es dynamisch sein soll, könnte ich eine Formellösung aufstellen oder Chris oder Franz eine VBA-Lösung anbieten. Was strebst Du an?
Gruß Werner
.. , - ...
Anzeige
AW: keine einmal Lösung
16.05.2018 12:18:15
lanala
Hallo Werner,
danke für deine schnelle Nachricht.
Da ich einiger solcher Datensätze Produzieren werde ist es nichts einmaliges. Wenn es eine VBA-Lösung dafür geben würde wäre es natürlich optimal. Sonst mach ich es halt immer so wie Franz es vorgeschlagen hat. Ich habe es noch nicht ausprobiert. Wird aber gleich nachgeholt.
Grüße lanala
AW: keine einmal Lösung
16.05.2018 12:18:23
lanala
Hallo Werner,
danke für deine schnelle Nachricht.
Da ich einiger solcher Datensätze Produzieren werde ist es nichts einmaliges. Wenn es eine VBA-Lösung dafür geben würde wäre es natürlich optimal. Sonst mach ich es halt immer so wie Franz es vorgeschlagen hat. Ich habe es noch nicht ausprobiert. Wird aber gleich nachgeholt.
Grüße lanala
Anzeige
AW: Mal wieder: Doppelte entfernen
15.05.2018 16:59:31
fcs
Hallo Lanala,
ist das eine einmalige Aktion oder willst du diesen Vorgang wiederholt mit unterschiedlichen Tabellenblättern/Dateien durchführen.?
Grundsätzlich kann man das so lösen:
1. Werte von XXX sortieren nach RT[min] und Max. m/z
2. in einer weiteren Spalte die doppelten markieren per formel
Formel in G3: =WENN(C2=C3;WENN(ABS(F3-F2)
3. Autofilter aktivieren und in der Zusatzspalte die "D" ausblenden
4. Daten markieren, kopieren und im Zielblatt einfügen
5. ggf. wieder nach Spalte # sortieren um die ursprüngliche Reihenfolge wieder herzustellen.
Gruß
Franz
Anzeige
AW: nachgefragt ...
16.05.2018 09:06:42
neopa
Hallo Franz,
... bei einer eher einmmaligen/seltenen Aktion halte ich hier die bereits aufgezeigte Standardfunktionalität (Duplikate entfernen) für einfacher und schneller realisiert als die von Dir aufgezeigte Lösungsmöglichkeit. Oder gehst Du davon aus, dass der TE eine alte Excelversion im Einsatz hat, wo es es die spez. Zusatzoptionen der Funktion noch nicht gab?
Gruß Werner
.. , - ...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige