Select Case - Spezial

Konstantin Gross

Erfahrenes Mitglied
Hallo,
ich bin gerade dabei in Excel und VBA eine Auswertung für Frachkosten zu programmieren, es funktioniert soweit auch alles, abre bei einem kleinen Problem komme ich einfach nicht weiter. Folgendes, ich prüfe in eine Zeile ob bestimmte Postleizahlen in einer Zeile vorkommen um diesen eine Zone zu vergeben, jetzt habe ich aber eine Zeile wo mind. 300 Postleihzahlen vorkommen. Ich hab das bisher so gelöst:

Code:
Select Case plz
    Case "75", "77", "78", "91", "92", "93", "94", "95"
        zone = "AA"
    Case "55"
        zone = "AL"
    Case "88"
        zone = "AM"
    Case "90"
        zone = "AN"
    Case Else
        MsgBox ("Falsche Zone, Spalte M")
        errorkeyspaltem = 1
End Select

Mein Problem ist jetzt, das ich per Hand, PLZ-Gebiete von z.B. 30000-40000 eintragen muss, da spielt aber Excel bzw. VBA nicht mehr mit wenn ich das halt "30000", "30001" etc. mache. Gibt es eine elegantere Lösung so große Zahlenbereiche unterzubringen und trotzdem diese in der Case Abfrage zu benutzen?

Gruss
 
Du hast natürlich Recht. Na, in der Hilfe vom Select Case für VB hab ich's nicht gefunden - allerdings steht's in der VBA Referenz drin. Mea Culpa. :-(

Gruß
 
Hallo,
macht doch nichts :) Bei einem anderen Problem könntest du mir vielleicht helfen und zwar überprüfe ich ja in einer Zeile die Postleitzahlen, diese waren vorher immer zweistellig. Z.B. 12345 Musterstadt, durch folgenden Code hab ich die PLZ ausgelesen:

plz = Format(plz, "00000") 'PLZ wird immer 5-stellig geschrieben
plz = Left(plz, 2) 'es bleiben nur die ersten 2 stellen

So für die Postleitzahlen waren für uns immer nur die ersten 2 Stellen interessant, da diese Zonen zugeordnet werden. Jetzt haben wir einen neuen Speditionpartner der Zonen hat wo man unbedingt die genaue Postleitzahl angeben muss. Jetzt kommt er ja bei mir nie in die Bedinung, siehe weiter oben den Code. Sprich die Postleitzahlen werden immer 5 stellig angegeben, aber für manche Zonen sind halt nur die ersten 2 und für die anderen die kompletten 5 Zahlen interessant, hast du ne Idee wie man das realisieren könnte?

Gruss
Konstantin
 
Also ich hätte ja die PLZ erstmal in einen Integer umgewandelt. Zumal z.B. "0z" auch noch im Bereich "09" To "12" liegt.

Visual Basic:
Select Case CInt(plz)
  Case 75000 To 75999, 77000 To 77999 ' usw.
End Select

Gruß
 
Hallo,
danke ich werds mir mal morgen anschauen, wenn ich an der Arbeit bin. Kann ich mit deinem geposteten Beispiel genau mein Ziel erreichen? Weil wenn ich das nur nach Int umwandel, was für Sinn soll das dann haben? Er hats ja vorher mit nur zwei Stellen wunderbar gemacht, sind halt noch ein paar fünfstellige dazugekommen.
 
Ich denke mir einfach das (deutsche) Postleitzahlen eben Zahlen sind und die würde ich numerisch vergleichen und nicht lexikalisch. Das verhindert unerwünschte Effekte - wenn irgendwie ein Buchstabe reingerutscht sein sollte. Es sollte zudem schneller sein 2 Zahlen miteinander zu vergleichen als 2 Strings. Dann ist es auch nicht soviel Schreibarbeit und sieht etwas übersichtlicher aus.

Gruß
 
Hallo,
hab das Problem jetzt gelöst, erstens hab ich den Datentyp der Postleitzahl auf Integer umgestellt, hab zwei Variablen erstellt und führe eine doppelte Case Abfrage durch, einmal für die 5stelligen Postleitzahlen und für die 2stellige Postleitzahlen. Und funktioniert jetzt wunderbar. Trotzdem danke für deine Hilfe.
 
Zurück