Excel: gleiche punkte finden

Hallo ;)

Habe ein Problem:

Habe 9 verschiedene Datensätze mit jeweils ca. 1450 Datenzeilen.
Diese Zeilen sind folgendermaßen aufgebaut (siehe auch Screenshot) :

X-Koordinate von Punkt1 | Y-Koord. v. Pkt.1| X-Koord. v. Pkt.2| Y-Koord. v. Pkt2| Messergebnis

Jetzt will ich jeweils 2 Datensätze vergleichen, ohne die Reihenfolge zu ändern ->

Es sollen in den verschiedenen Datensätzen Zeilen gefunden werden, welche die gleichen Koordinaten haben ( x1|y1|x2|y2|).

Warum das Ganze? Weil ich erwarte, daß sich die Meßergebnisse leicht unterscheiden und ich in den beiden Datensätze diese durch den Mittelwert ersetzen will.

Problem: Die Reihenfolge der jeweiligen Zeilen darf nicht verändert werden, somit fällt leider die Sortiermöglichkeit aus.

Im Screenshot sieht man ein Beispiel zweier nebeneinander dargestellter Datensätze.

Ich verwende Excel2007.

Hoffe, ich habe mich halbwegs verständlich ausgedrückt ;)
und bedanke mich jetzt schon für eure Hilfe.

LG
GKL

Frage.JPG
 
1. Das sollte sich eigentlich durch ein kleines VBA makro gleich in Excel lösen lassen. Evtl. habe ich am Abend Zeit, dann poste ich mal ein kleines Makro.

2. Alternativ kopierst du die Tabelle und sortierst du die Datensätze und siehst sofort welche dass mehrfach vorkommen - diese kannst du dann händisch im Original angleichen - wenn es nicht zuviele sind.
 
hallo 90nop ;)

danke für die antwort ;)

es sind leider viele gleiche datenzeilen, da ich beim messen mit einer 50% überlappung gearbeitet habe.

zweites leider: kann keine makros schreiben :(

aber die idee mit den makros bringt mich drauf, mein problem ein biss. klarer zu posten:

wenn(koord. datensatz1)==(koord. datensatz2) dann (Messwert_Mitt=(Messwert1+Messwert2)/2).

schön wäre es auch, wenn ich ein wenig kontrolle über diese aktion haben könnte, also die berechnungen extra sehen könnte -> 3 spalten, welche mir Messwert1, Messwert2 und Messwert_Mitt zeigen.

lg
gkl
 
hallo,

ich habe mal damit begonnen. der code vergleicht sämtliche Zellen und sucht gleiche Punkte - in eine Zelle dahinter wird der Mittelwert geschrieben. So noch nicht zu verwenden, aber das grundsätzliche Vorgehen geht in die Richtung.

Ich muss noch herausfinden wie man Werte von den Zellen lesen/schreiben kann ohne sie zu selektierten.

Code:
Aktueller code am Ende des Threades

mal sehen ob ich morgen Zeit finde, es fertig zu stellen :)

btw:vb nervt ;)

EDIT: Ein EXCEL sheet angehängt, kannst mal etwas mit rumspielen :)
.txt Endung entfernen.

EDIT2: Codeverweis.
 
Zuletzt bearbeitet:
wow 8o super!

vielen dank für deine mühe!

da bekomm ich doch glatt ein schlechtes gewissen, wenn ich sehe, wieviel zeit du hierfür investierst.

hatte mir nicht gedacht, daß das so kompliziert ist 8o

lg

gkl
 
Original von gkl
wow 8o super!

vielen dank für deine mühe!

da bekomm ich doch glatt ein schlechtes gewissen, wenn ich sehe, wieviel zeit du hierfür investierst.

hatte mir nicht gedacht, daß das so kompliziert ist 8o

lg

gkl
Das einzige was etwas gedauert hat war, wieder in VBA reinzukommen. Ich habs jetzt raus wie man direkt Zellen anspricht. Performancemässig sollte das viel besser sein:
Code:
Sheets("Tabelle1").Range("A1").Value = "Hallo"

Ich meld mich wenn ich es habe.


EDIT:

Noch eine wichtige Frage:

Können die gleichen Koordinaten auch innerhalb eines Datensatztes auftreten oder sind gleiche Koordinaten in einem Datensatz eindeutig?

EDIT2:

So, das Makro macht nun folgendes:

Es sucht nach doppelten Koordinaten und berechnet den Mittelwert und überschreibt mit diesem das Ohm Resultat - der ursprüngliche Wert des Resultates wird einfach eine Zelle dahinter geschreiben.
Code:
aktueller code am Ende des Threades

Hier nochmal zum testen, das excel im Anhang:

EDIT3: Codeverweis
 
Zuletzt bearbeitet:
hallo 90nop,

zur frage: es können _keine_ doppelten koordinatensätze in einem datensatz vorkommen.

das makro funktioniert super. ein wenig aufwendig ist nur, daß, wenn ein doppelter koordinatensatz gefunden wird, das informative popupfenster das OK bestätigt bekommen will ;)

hab dir mal ein realbeispiel angehängt 8o

lg

gkl
 
das makro funktioniert super. ein wenig aufwendig ist nur, daß, wenn ein doppelter koordinatensatz gefunden wird, das informative popupfenster das OK bestätigt bekommen will
Na das lässt sich einfach ausbauen ;)

einfach die Zeile:
Code:
MsgBox "Doppelte Definition von Koodinaten gefunden: " & iCNT
löschen/auskommentieren.

Ich schau mir mal deine Daten an. :)

EDIT: hier der aktuelle code:

Code:
Sub test()
Dim sCELL As String
Dim iCNT As Integer


iCNT = 5
    Do
        sCELL = Range("A" & iCNT).Value
        If sCELL = "" Or IsNull(sCELL) Then Exit Do
        
        CheckKoord (iCNT)           'überprüfe auf gleiche Koordinaten
        iCNT = iCNT + 1
    Loop
   
End Sub

'erwartet Zeilennummer
'checkt ob die Koordinaten im Zweiten Datensatz zu finden sind.
'ändert die Werte auf einen Mittelwert und schreibt den originalen dahinter.
Private Function CheckKoord(row As Integer)
    Dim iCNT As Integer     'Zähler für Loop
    Dim var As String
    'Die row zum checken (Datensatz 1):
    Dim ik_d1_x1 As Integer
    Dim ik_d1_y1 As Integer
    Dim ik_d1_x2 As Integer
    Dim ik_d1_y2 As Integer
    Dim ohm_d1_res As Double
    
    'Die row zum checken (Datensatz 2):
    Dim ik_d2_x1 As Integer
    Dim ik_d2_y1 As Integer
    Dim ik_d2_x2 As Integer
    Dim ik_d2_y2 As Integer
    Dim ohm_d2_res As Double

    'lese die zu überprüfenden Koordinaten aus:
    ik_d1_x1 = CInt(Range("A" & row).Value)
    ik_d1_y1 = CInt(Range("B" & row).Value)
    ik_d1_x2 = CInt(Range("C" & row).Value)
    ik_d1_y2 = CInt(Range("D" & row).Value)

    ohm_d1_res = Range("E" & row).Value


    iCNT = 5
    Do
        
        If Range("G" & iCNT).Value = "" Or IsNull(Range("G" & iCNT).Value) Then Exit Do
        
        ik_d2_x1 = CInt(Range("G" & iCNT).Value)
        ik_d2_y1 = CInt(Range("H" & iCNT).Value)
        ik_d2_x2 = CInt(Range("I" & iCNT).Value)
        ik_d2_y2 = CInt(Range("J" & iCNT).Value)
            
        
        If ik_d1_x1 = ik_d2_x1 And ik_d1_y1 = ik_d2_y1 And ik_d1_x2 = ik_d2_x2 And ik_d1_y2 = ik_d2_y2 Then
            'Alle Koordinaten der beiden Datensätze stimmen überein!
            ohm_d2_res = Range("K" & iCNT).Value
            
            Range("L" & iCNT).Value = Range("K" & iCNT).Value
            Range("F" & row).Value = Range("E" & row).Value
            Range("K" & iCNT).Value = (ohm_d1_res + ohm_d2_res) / 2
            Range("E" & row).Value = (ohm_d1_res + ohm_d2_res) / 2
            
            
        End If
        iCNT = iCNT + 1
    Loop

End Function
 
hallo 90nop,

habe wahrscheinlich den neuesten code falsch übertragen, da jetzt der mittelwert nicht mehr errechnet wird.

Mittelwert.JPG


aber sonst: einfach toll, daß ich nicht mehr das OK bestätigen muß ;)

lg

gkl
 
Zurück
Oben