21.03.2019, 13:12 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2019, 19:18 von WillWissen.
Bearbeitungsgrund: Formatierung
)
Hallo zusammen,
ich versuche folgendes zu realisieren:
Spalte A: Steht ein Straßenname Spalte B: Hausnummer Spalte C: Hausnummer Zusatz Spalte D: Bezirk
jetzt versuche ich Folgendes Trennung der Spalten in:
A: Straßenname B: gerade von
c: gerade Hausnummernzusatz von D: gerade bis E: gerade Hausnummernzusatz bis F: ungerade von G: ungerade Hausnummernzusatz von H: ungerade bis I: ungerade Hausnummernzusatz bis J: Bezirk
ist dies zu realisieren bei ca. 40000 Einträgen? Anbei ein Auszug (Mappe 1 ausgangszustand, Mappe 2 gewünschtes Ziel.
Sub aufteilen() Dim letzte As Long, freie As Long Dim i As Long, j As Long, Anzahl As Long Dim Ziel As Worksheet Dim Suche As Range Dim Suche2 As Integer
Zur Info: Der Code ist sicher nicht sehr elegant, aber er sollte machen, was du brauchst. Und deine Beispieldatei strotzt leider im Ergebnis nur so vor Fehlern, siehe schon Hinweis von Elex. Auch der Eintrag "Alfstraße - gerade von: 5" ist falsch. Wenn man also hier um Hilfe bittet, sollte man wenigstens soviel Energie investieren, dass die Helfer nicht noch rätseln müssen.
Schöne Grüße Berni
Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:1 Nutzer sagt Danke an MisterBurns für diesen Beitrag 28 • Statistik
kann es vorkommen, dass nur ein mittlerer Teil einer Strasse in einem anderen Bezirk liegt?
Dann ist die Sortierung nach Strasse, Bezirk, Hausnummer nicht ausreichend.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:1 Nutzer sagt Danke an Ego für diesen Beitrag 28 • Statistik
1. Es bringt leider nichts, wenn du ein Bild von der gelben Zeile postest, ohne die Fehlermeldung selbst bekanntzugeben.
2. Ich habe meinen Code 1:1 in deine neue Datei eingefügt und laufen lassen - kein einziges Problem festgestellt. Anbei die Datei inkl. Code. Lass ihn laufen, es wird keine Fehlermeldung geben
3. Wenn du schon ein verbessertes Beispiel hochlädst, sollte auch das Ergebnis stimmen. Ich bekomme für Braunschweig Allee 5 verschiedene Ergebniszeilen, da auch 5 Bezirke (02.1 bis 02.4 sowie 09.0)
ich habe meine Frage nicht deutlich genug formuliert. Dein zweites Beispiel ist auch mit Bernis Algorithmus lösbar.
Ein neuer Versuch:
Kann es vorkommen, dass ein vorderer Teil einer Strasse zu einem Bezirk, der nächste Teil zu einem anderen und dann wieder ein Teil kommt, der zum ersteren Bezirk gehört?
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Scheint mir eine typische 'Dictionary' Aufgabestellung zu sein:
Code:
Sub M_snb() sn = Tabelle3.Cells(1).CurrentRegion
With CreateObject("scripting.dictionary") For j = 1 To UBound(sn) t = sn(j, 2) Mod 2 = 0 sp = Array(sn(j, 1), IIf(t, sn(j, 2), ""), IIf(t, sn(j, 3), ""), "", "", IIf(t, "", sn(j, 2)), IIf(t, "", sn(j, 3)), "", "", sn(j, 4)) If .exists(sn(j, 1) & sn(j, 4)) Then st = .Item(sn(j, 1) & sn(j, 4)) If t Then If sp(1) < st(1) Then st(1) = sp(1) st(2) = sp(2) End If If sp(1) > Val(st(3)) Then st(3) = sp(1) st(4) = sp(2) End If End If If Not t Then If sp(5) < st(5) Then st(5) = sp(5) st(6) = sp(6) End If If sp(5) > Val(st(7)) Then st(7) = sp(5) st(8) = sp(6) End If End If Else st = sp End If .Item(sn(j, 1) & sn(j, 4)) = st Next Tabelle2.Cells(10, 1).Resize(.Count, UBound(sp) + 1) = Application.Index(.items, 0, 0) End With End Sub