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

verheirates Paar erkennen

verheirates Paar erkennen
17.01.2008 17:22:42
Daniel
Moin,
in meiner Mitgliederliste möchte ich die Ehepaare zusammenfügen. Das habe ich auch schon hinbekommen mit diesem Code:

Next l
wks2.Range("A:A").Clear
wks2.Cells.Sort Key1:=wks2.Range("C2"), Order1:=xlAscending, Key2:=wks2.Range("E2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
For A = wks2.Range("B65000").End(xlUp).Row To 2 Step -1
If (wks2.Cells(A, 3) & wks2.Cells(A, 5)) = (wks2.Cells(A - 1, 3) & wks2.Cells(A - 1, 5)) Then
wks2.Cells(A - 1, 4) = wks2.Cells(A - 1, 4) & IIf(InStr(1, wks2.Cells(A, 4), " und ") > 0, ", ", _
_
" und ") & wks2.Cells(A, 4)
wks2.Rows(wks2.Cells(A, 3).Row).Delete Shift:=xlUp
End If


Dort werden Nachname (Spalte C) und Straße (Spalte E) verglichen und wenn zwei übereinstimmen, werden die Vornamen (Spalte D) zusammengefügt. Zur Sicherheit, dass nicht zwei verschiedene Paare zusammengefügt werden, möchte ich jetzt die Paare kennzeichnen. Also so in etwa:


Id_101          Frau Meier Inge
Id_102  Id_103  Herr Meier Udo
Id_103  Id_102  Frau Meier Andrea
Id_104          Herr Meier Kurt


In Spalte B steht die eigene ID, in Spalte T steht dann die ID vom Partner.
Jetzt sollen die ID verglichen werden und die passenden Paare zusammengefügt werden.
Also wie im Beispiel nur Udo und Andrea.
Ich habe überhaupt keine Ahnung wie ich das machen kann!
mfg
Daniel

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

Betreff
Datum
Anwender
Anzeige
AW: keine Lösung, nur ne Anmerkung
17.01.2008 23:28:15
Daniel
Hi
sorry ist jetzt keine Lösung, aber mal so als Anmerkung
wenn du die Ehepaare auf diese Weise herausfinden kannst, brauchst du schon etwas glück , denn
- heutzutage haben Ehepartner nicht zwingend den gleichen Nachnamen, jeder kann seinen Namen behalten
- Häufige Namen (Schmitt, Meier, Müller usw) können in einer Strasse ja öfters auftauchen, da müsstest du zumindest die Hausnummr mit prüfen, um nicht die Falschen miteinander zu Verheiraten. Bei Hochhäusern hilft dir noch nicht mal das.
- auch bei kleinen Wohneinheiten kommt es oft vor, daß die Kinder noch im gleichen Haus wohnen wie die Eltern, dh. auch hier ist die Hausnummer kein eindeutiger Hinweis.
also mir wär das Risiko zu gross, daß ich da mal die Falschen verheirate, dann lieber jedem seinen eigenen Brief geschickt.
zumindest solltest du bei jedem auf diese Weise gefundenen Paar auch prüfen obs auch wirklich so ist, bevor du es in deine Liste übernimmst.
Gruß, Daniel

Anzeige
AW: verheirates Paar erkennen
18.01.2008 00:01:15
Christian
Hallo Daniel,
da erkenne ich meinen ursprünglichen Vorschlag wieder ...
https://www.herber.de/forum/archiv/936to940/t938665.htm
Die Idee war, dass du die Tabelle nicht sortieren oder sonstige Aktionen durchführen musst, um die Paare zu indentifizieren. Die Daten könnten also zB unsortiert oder sortiert nach Eintrittsdatum oder sonst wie vorliegen und du wirst auf Basis dieser ID's immer die richtigen Paare finden.
Das heißt natürlich, dass die Zuordnung (wer ist mit wem liiert) vorher eingetragen werden muss.
Im Beispiel ist die Beziehung allerdings nur einmal (also nicht wechselseitig) gesetzt. Ebenso ist die ID hier nur eine Zahl ohne "ID_". Das vereinfacht die Eingabe und auch den Code. Das Ergebnis wird in "Tabelle2" ausgegeben.
Beachte:
- in SpalteA und SpalteB dürfen nur ganze Zahlen stehen.
- setze den Bezug jeweils zum "Mann", dann wird das Ergebnis:
"-VornameFrau- und -VornameMann-" ausgegeben
- Der Code ist nur als Beispiel zu verstehen, wie man so was scripten kann (ohne weitere Fehlerabfangung o.ä.).
Gruß Christian
Hier die Beispielmappe:
https://www.herber.de/bbs/user/49133.xls
und hier noch der Code:

Option Explicit
Sub GetRelation()
Dim i As Long, k As Long
Dim varList(), varRel
With Sheets("Tabelle1")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
varRel = Application.Match(CLng(.Cells(i, 1)), .Columns(2), 0)
If CLng(.Cells(i, 2)) = 0 Then
ReDim Preserve varList(5, k)
If IsError(varRel) Then
varList(0, k) = .Cells(i, 3)                    'Anrede
varList(1, k) = .Cells(i, 5)                    'Vorname
Else
varList(1, k) = _
.Cells(i, 5) & " und " & .Cells(varRel, 5)      'Vornamen
End If
varList(2, k) = .Cells(i, 4)                       'Nachname
varList(3, k) = .Cells(i, 8)                       'Strasse
varList(4, k) = .Cells(i, 6)                       'PLZ
varList(5, k) = .Cells(i, 7)                       'Stadt
k = k + 1
End If
Next
End With
With Sheets("Tabelle2")
.Cells.Delete
.Range(.Cells(2, 1), .Cells(UBound(varList, 2) + 2, 6)) = Application.Transpose(varList)
.Columns.AutoFit
End With
End Sub


Anzeige
AW: verheirates Paar erkennen
18.01.2008 17:07:15
Daniel
Hallo Christian,
danke für den Code!
Jetzt weiß ich nicht, wie ich den einbauen soll, weil bei meinem Code nur die mit einem aktivierten Kontrollkästchen zusammengefügt werden. Ich hatte nur ein Teil von dem Gesamten Code hier rein gestellt.
So sieht der komplett aus:

Sub Übertrage_In_Neue()
Dim wkb1 As Workbook
Dim wks1 As Worksheet
Dim wkb2 As Workbook
Dim wks2 As Worksheet
Dim myArray()
Dim A As Long
Dim l As Long
Set wkb1 = ThisWorkbook
Set wks1 = wkb1.Worksheets("Mitgliederliste")
Application.ScreenUpdating = False
l = 0
For A = 1 To wks1.CheckBoxes.Count
If wks1.CheckBoxes(A) = 1 Then
l = l + 1
ReDim Preserve myArray(l)
myArray(l) = wks1.Rows(Cells(A + 7, 1).Row).Address
End If
Next A
Set wkb2 = Workbooks.Add
Set wks2 = wkb2.Worksheets("Tabelle1")
wks1.Range("7:7").Copy
wks2.Range("A1").PasteSpecial
For l = 1 To UBound(myArray)
wks1.Range(myArray(l)).Copy
wks2.Range("a" & l + 1).PasteSpecial
Next l
wks2.Range("A:A").Clear
wks2.Cells.Sort Key1:=wks2.Range("C2"), Order1:=xlAscending, Key2:=wks2.Range("E2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
For A = wks2.Range("B65000").End(xlUp).Row To 2 Step -1
If (wks2.Cells(A, 3) & wks2.Cells(A, 5)) = (wks2.Cells(A - 1, 3) & wks2.Cells(A - 1, 5))  _
Then
wks2.Cells(A - 1, 4) = wks2.Cells(A - 1, 4) & IIf(InStr(1, wks2.Cells(A, 4), " und " _
) > 0, ", ", _
" und ") & wks2.Cells(A, 4)
wks2.Rows(wks2.Cells(A, 3).Row).Delete Shift:=xlUp
End If
Next A
wks2.Cells.Columns.AutoFit
wks2.Range("A1").Select
Application.ScreenUpdating = True
ActiveWorkbook.SaveAs Filename:="Liste.xls", FileFormat:=xlNormal
ActiveWorkbook.Close
End Sub


Kannst du mir dabei noch einmal helfen?
mfg
Daniel

Anzeige
AW: verheirates Paar erkennen
18.01.2008 21:22:00
Christian
Hallo Daniel,
Das mit den Checkboxes find ich nicht besonders glücklich. Von Controls (ob aus "Formular" oder "Steuerelement-Toolbox") innerhalb einer Tabelle halte ich nicht viel.
Woher weißt du, dass z.B. die 12. Checkbox sich in der Zelle "Cells(12 + 7, 1)" befindet? Was machst du mit den CheckBoxes, wenn neue Einträge hinzukommen oder vorhandene gelöscht werden. Stimmt dann die Zuordnung zur Zelle noch?
Geschickter wäre es IMHO, wenn du in der Tabelle nur die "Rohdaten" aufführst und so eine Auswahl nicht über Checkboxes in der Tabelle sondern über eine Userform bewerkstelligst.
Prinzipiell kann man deinen Ansatz mit den CheckBoxes auch mit meinem Code umsetzen.
in etwa so:

With Sheets("Tabelle1")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .CheckBoxes(A) = 1 Then
varRel = Application.Match(CLng(.Cells(i, 1)), .Columns(2), 0)
If CLng(.Cells(i, 2)) = 0 Then
'...usw

für weitere Details müsste ich deine Tabelle kennen. Lade einfach mal 'ne abgespeckte Datei mit anonymisierten Daten hier auf den Server. Dann schau ich mir das mal an.
Grüße
Christian

Anzeige
AW: verheirates Paar erkennen
18.01.2008 22:32:16
Daniel
Hallo Christian,
bis jetzt hatte es immer funktioniert, nur dass er alle im gleichem Haus zusammenfügt.
Eigentlich steht auch in der Spalte mit der Straße auch die Hausnummer, was die Namen noch einmal etwas trennt.
https://www.herber.de/bbs/user/49182.xls
mfg
Daniel

AW: verheirates Paar erkennen
19.01.2008 16:04:00
Christian
Hallo Daniel,
abgesehen vom Thema "Steuerelemente in einer Tabelle", stellt sich die Frage nach dem Handling.
Wenn du z.B. 150 von 300 Einträgen auswählen musst, dann wünsch ich viel Spaß...
Hier mein Ansatz:
Durch die CheckBoxes wird das ganze etwas komplexer, aber das Prinzip ist das gleiche.
- wie gehabt, den Bezug bei den "Männer" setzen, um den Vornamen der Frau zuerst aufzuführen.
- wie gehabt, nur ganze Zahlen in SpalteB und SpalteM.
- wenn von einem Paar nur ein Partner angewählt ist, wird nur dieser in die Liste übertragen.
Gib mir Bescheid, wie du damit parat kommst.
Grüße
Christian

Option Explicit
Sub CreateList()
Dim wkb As Workbook
Dim lngRows() As Long, varList(), varRel
Dim blnRel As Boolean, blnMale As Boolean, blnData As Boolean
Dim i As Long, j As Long, k As Long
ReDim lngRows(0)
With ThisWorkbook.Sheets("Mitgliederliste")
For i = 8 To .Cells(.Rows.Count, 2).End(xlUp).Row
blnRel = 0: blnMale = 0
If .Cells(i, 1) Then
varRel = IIf(.Cells(i, 13) = "", _
Application.Match(CLng(.Cells(i, 2)), .Columns(13), 0), _
Application.Match(CLng(.Cells(i, 13)), .Columns(2), 0))
blnMale = .Cells(i, 13)  ""
If IsError(Application.Match(i, lngRows, 0)) Then
ReDim Preserve varList(5, k)
blnData = True
If Not IsError(varRel) Then
If .Cells(varRel, 1) Then
blnRel = True
ReDim Preserve lngRows(j)
lngRows(j) = varRel
j = j + 1
End If
End If
If Not blnRel Then
varList(0, k) = .Cells(i, 14)                      'Anrede
varList(1, k) = .Cells(i, 4)                       'Vorname
Else
varList(1, k) = IIf(blnMale, _
.Cells(varRel, 4) & " und " & .Cells(i, 4), _
.Cells(i, 4) & " und " & .Cells(varRel, 4))     'Vornamen
End If
varList(0, k) = .Cells(i, 14)
varList(2, k) = .Cells(i, 3)                          'Nachname
varList(3, k) = .Cells(i, 5)                          'Strasse
varList(4, k) = .Cells(i, 6)                          'PLZ
varList(5, k) = .Cells(i, 7)                          'Stadt
k = k + 1
ReDim Preserve lngRows(j)
lngRows(j) = i
j = j + 1
End If
End If
Next
End With
If Not blnData Then
MsgBox "keine Auswahl getroffen", 48
Else
Application.ScreenUpdating = False
Set wkb = Workbooks.Add
With wkb.Worksheets(1)
.Range(.Cells(1, 1), .Cells(1, 6)) = _
Array("Anrede", "Vorname", "Nachname", "Strasse", "PLZ", "Stadt")
.Range(.Cells(2, 1), .Cells(UBound(varList, 2) + 2, 6)) = _
Application.Transpose(varList)
.Columns.AutoFit
End With
wkb.Close True, ThisWorkbook.Path & "\Liste.xls"
Application.ScreenUpdating = True
End If
End Sub


Anzeige
und gleich 'ne Korrektur...
19.01.2008 16:13:00
Christian
die Zeile: "varList(0, k) = .Cells(i, 14)" ist doppelt (copy&paste Fehler)
Schmeiß die untere der beiden raus.
Christian

AW: verheirates Paar erkennen
19.01.2008 16:25:31
Daniel
Danke für den Code aber bei mir zeigt er den Laufzeitfehler 9 bei "ReDim lngRows(0)" an.
mfg
Daniel

AW: verheirates Paar erkennen
19.01.2008 16:35:03
Daniel
Danke für den Code aber bei mir zeigt er den Laufzeitfehler 9 bei "ReDim lngRows(0)" an.
mfg
Daniel

AW: verheirates Paar erkennen
19.01.2008 16:40:44
Christian
ich sehe grade,du hast in deinem Modul "Option Base 1" gesetzt (oberste Zeile).
Nimm diese Zeile raus, dann müsste es laufen.
Gruß
Christian

AW: verheirates Paar erkennen
19.01.2008 16:49:00
Daniel
Super, vielen Dank!!!!!!
Jetzt funktioniert es!
mfg
Daniel

Anzeige
noch ein Fehler!
19.01.2008 16:59:00
Daniel
Ich habe noch ein Fehler gefunden mit der Anrede!
Wenn Excel die zusammenfügt nimmt er die Anrede von der ersten Person.
Das sieht so aus: Herrn Andrea_008 und Herbert_005
Bei deinem ersten Code wurde gar keine Anrede genommen, ich glaube das ist besser, oder?
mfg
Daniel

Hat sich erledigt!
19.01.2008 17:02:40
Daniel
Plötzlich funktionierte es!!!
Nochmals Danke!
mfg
Daniel

Du musst diese Zeile löschen!
19.01.2008 17:08:48
Christian
... sonst tritt dieser Fehler wieder auf.
siehe meine Antwort:
https://www.herber.de/forum/messages/943366.html
Christian

Anzeige
AW: noch ein Fehler!
19.01.2008 17:04:00
Christian
den Fehler hatte ich selbst schon entdeckt.
siehe:
und gleich 'ne Korrektur...
Grüße
Christian

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige