21.03.2019, 12:12 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2019, 18: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