Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1196to1200
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
Inhaltsverzeichnis

Alternative zu Select Case

Alternative zu Select Case
Kai
Hallo zusammen,
ich habe eine Frage, per Worksheet Change lasse ich zu jedem Kunden (nach Eingabe der Kundenkennung)
ein Adresslabel drucken.
Nun habe ich mittlerweile so viel Code dass ich die 64kb bald erreiche und brauche dringend eine Alternative.
Außerdem ist es sehr nervig so einen neuen Kunden hinzuzufügen.
Weiß jmd. Rat?
[code] Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Application.EnableEvents = False If Target.Address = "$B$2" Then If Len(Target) > 20 Then Target = Left(Target, 20) End If End If If Target.Address = "$B$2" Then Select Case Target.Value ' Kunde Müller Case "1220" To "1300" Range("D2").Value = "Müller" Labelprint 'Kunde Meier Case "1300" To "1310" Range("D2") Range("D2").Value = "Meier" Labelprint 'usw Case Else MsgBox "Kein Kunde!", vbCritical Range("B2").Select End Select End If Application.EnableEvents = True End Sub
[/code]
Gruß Kai
AW: Alternative zu Select Case
31.01.2011 18:40:41
Josef

Hallo Kai,
warum per VBA?
das geht doch ganz einfach per SVERWEIS() oder INDEX() aus einer liste in einem anderen Blatt.
Tabelle1

 ABCD
1    
2Kundenkennung:2103Huber 
3    
4    

Formeln der Tabelle
ZelleFormel
C2=INDEX(Tabelle2!$B$2:$B$13;VERGLEICH(B2;Tabelle2!$A$2:$A$13;0))


Tabelle2

 AB
1KennungKunde
21001Müller
31002Müller
41003Müller
51120Meier
61121Meier
71122Meier
81123Meier
91124Meier
102101Huber
112102Huber
122103Huber
132104Huber


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4

Gruß Sepp

Anzeige
AW: Was mit Worksheet_Change
31.01.2011 18:49:05
Kai
Hallo Sepp,
Ich habe jetzt Beispielkunden, ich habe tatsächlich aber Kunden mit 10000er Nummern.
also von 1457845100000 bis 1457845199999
Da ist das über Matrixformel nix
Gruß Kai
was hat das mit den Kundennummern zu tun?
31.01.2011 18:55:26
Josef

Hallo Kai,
das ist doch "Wurscht" ob die Kundennummer 1234 heißt oder 1234000000001234.
Wieso sprichst du von Matrixformeln?

Gruß Sepp

Anzeige
AW: was hat das mit den Kundennummern zu tun?
31.01.2011 18:59:58
Kai
Hallo Sepp,
Index ist eine Matrixformel oder nicht?
Aber wenn ich für jeden Kundenrange eine Zeile in Excel brauch habe ich die 65536 bald erreicht.
Gruß Kai
AW: was hat das mit den Kundennummern zu tun?
31.01.2011 19:14:15
Josef

Hallo Kai,
mit deinen mageren Infos ist es leider nicht Möglich einen für dich geeigneten Lösungsweg aufzuzeigen,
wie sind die Nummernbereiche den aufgebaut?, wie pflegst du diese bisher?, du schreibst doch wohl nicht jede Nummer in den Code, das würde doch jede automatisierung ad absurdum führen.

Gruß Sepp

Anzeige
AW: was hat das mit den Kundennummern zu tun?
31.01.2011 19:16:46
Reinhard
Hallo Kai,
sag doch mal eine Hausnummer, dann müssen wir nicht raten, wieviele Kunden ganz grob, plus minus 20.000
werden es denn in 2 Jahren sein?
Übrigens kann man ja locker sagen, bei Nummern von 0-999 suche in A, bei 1000-1999 suche in B usw.
Gruß
Reinhard
AW: was hat das mit den Kundennummern zu tun?
01.02.2011 13:15:06
Kai
Hallo,
also mit optimistischen Blick in die Zukunft werden es in zwei Jahren ca. 25000 Kunden sein.
Ja, momentan Pflege ich für jeden neuen Kunden direkt in den Code den Kundennummernkreis ein, ich weiß dass das tödlich ist, deshalb brauche ich abhilfe.
Gruß Kai
AW: was hat das mit den Kundennummern zu tun?
01.02.2011 18:54:04
Josef

Hallo Kai,
anbei mal ein Beispiel, mit Matrixformel und 40.000 Kunden, obwohl man es auch ohne Matrixformel lösen kann. Die Berechnung erfolg Blitzschnell. Gezipt weil sonst zu groß!
https://www.herber.de/bbs/user/73347.zip

Gruß Sepp

Anzeige
AW: was hat das mit den Kundennummern zu tun?
02.02.2011 18:59:11
Kai
Hallo Sepp,
das funktioniert irgendwie nicht.
Probier mal 029070000 bis 029079999 und 06400000 bis 06499999
Danke!!!
Gruß Kai
AW: was hat das mit den Kundennummern zu tun?
02.02.2011 19:30:06
Josef

Hallo Kai,
also verarschen kann ich mich selber!
deine Beispielzahlen sind in meiner Liste nicht vorhanden, darum kann auch kein korrektes Ergebnis erwartet werden! Soll ich etwa deine Kundennummern wissen? Meine Datei ist als Beispiel gedacht, wie man dein Problem lösen könnte und das auch 40.000 Kunden keine Schwierigkeit für eine Formel darstellen.
Also mach damit was du willst, ich bin raus, weil du nicht zur kooperation bereit bist.
Alles was man von dir hört ist "geht nicht" ohne das du auch nur versuchst, eine angebotene Hilfe zu verstehen.

Gruß Sepp

Anzeige
AW: Alternative zu Select Case
31.01.2011 18:53:04
Jowe
Hallo Kai,
mach doch aus dem individuellen Code je Kunde einfach eine einzige Subroutine für alle Kunden.
Die rufst Du dann aus der Hauptroutine mit der entsprechnden Parameterübergabe aus:
Call lblPrint("Müller",1200,1300) 'die drei Werte konnen auch Variable sein
Sub lblPrint(varKunde, varWert1, varWert2)
Case varWert1 To "varWert2
Range("D2").Value = varKunde
Labelprint
case else
MsgBox....
end select
End Sub
Gruß
Jochen
AW: Alternative zu Select Case
31.01.2011 19:02:40
Kai
Hallo Jochen,
das verstehe ich leider nicht...
Ich Scan die Nummer in B2 und via CarriageReturn wird dann das Worksheet Change ausgelöst.
Dann macht er SelectCase und am Ende druckt er die Adresse, steh bisschen am Schlauch...
Gruß Kai
Anzeige
Datenpflege nicht im Code
31.01.2011 19:44:23
Erich
Hallo Kai,
so eine Datenpflege im Prozedurcode ist tödlich. Dafür gibt es doch in Excel Tabellen.
Hier wird die Beziehung zwischen Kennungen und Kunden in der blau unterlegten Tabelle hinterlegt:
 ABCDEFGHI
1 Eingabe   Kennungen abKunde nur zur Info
2Kennung:1122Kunde:Meier 0<<< frei >>> Kennungen 0 bis 1000
3     1001Müller Kennungen 1001 bis 1119
4     1120Meier Kennungen 1120 bis 1124
5     1125<<< frei >>> Kennungen 1125 bis 2100
6     2101Huber Kennungen 2101 bis 2104
7     2105<<< frei >>> Kennungen 2105 bis 9999998
8     9999999<<< frei >>>  

Formeln der Tabelle
ZelleFormel
D2=INDEX($G$2:$G$8;VERGLEICH(B2;$F$2:$F$8;1))
I2="Kennungen "&F2&" bis "&F3-1
I3="Kennungen "&F3&" bis "&F4-1

Für jeden Kunden muss nur die kleinste Kennung vorgegeben werden.
Bei Eingabe einer Kennung in B2 ändert sich (einfach per Excdelformel) de Wert in D2.
Den kannst du dann vor dem Labeldruck auslesen.
Alternativ könntest du in VBA, also ohne Formel und ohne Zelle D2,
den Kunden für B2 aus der blau unterlegten Tabelle ermitteln.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Datenpflege nicht im Code
01.02.2011 13:24:58
Kai
Hallo Erich,
das mit der Formel klappt leider nicht, das ich die Kundennummern nicht chronologisch aufsteigend habe.
sondern wild durcheinander und wenn es neue Kunden gibt sind auch die nicht chronlogisch Aufsteigend sondern die Nummern errechnet sich aus einigen Faktoren ich bekommen nur mitgeteilt.
Nummer von XXXXXXXXX4500000 bis XXXXXXXXX459999 oder von XXXXXXXXX6720000 bis XXXXXXXXX6729999
Gruß Kai
Nummernkreise von Kunden
01.02.2011 16:44:20
Kunden
Hallo Kai,
"chronologisch" ist hier gar nichts - das hätte etwas mit Zeit zu tun.
Die (bei mir blau unterlegte) Tabelle lässt sich doch nach "Kennung ab" sortieren. (Mit Code wäre das nicht so einfach... ;-)
Und dann funzern die Formeln.
Hier habe ich dein Beispiel für den Kunden "NeuKunde"
von XXXXXXXXX4500000 bis XXXXXXXXX459999 oder von XXXXXXXXX6720000 bis XXXXXXXXX6729999
als
von XXXXXXXXX450000 bis XXXXXXXXX459999 oder von XXXXXXXXX6720000 bis XXXXXXXXX6729999
mal eingepflegt:
(Sind die "X"e irgend ein Text oder wofür stehen sie?)
 ABCDEFGHI
1 Eingabe   Kennungen abKunde nur zur Info
2Kennung:XXXXXXXXX459876Kunde:NeuKunde AAAAA10Müller bis AAAAA39
3     AAAAA40<<< frei >>>  
4Kennung:XXXXXXXXX460000Kunde:<<< frei >>> XXXXXXXXX450000NeuKunde bis XXXXXXXXX459999
5     XXXXXXXXX460000<<< frei >>>  
6     XXXXXXXXX490000anderer bis XXXXXXXXX490299
7     XXXXXXXXX490300<<< frei >>>  
8     XXXXXXXXX6720000NeuKunde bis XXXXXXXXX6729999
9     XXXXXXXXX6730000<<< frei >>>  

Formeln der Tabelle
ZelleFormel
D2=INDEX($G$2:$G$9;VERGLEICH(B2;$F$2:$F$9;1))
D4=SVERWEIS(B4;$F$2:$G$9;2;1)

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Nummernkreise von Kunden
02.02.2011 19:20:06
Kunden
Hallo Erich,
die X stehen für immer gleich Zahlen.
Habe mal 3 Kunden getestet funktioniert bis jetzt komisch ist dass wenn ich eine beliebige Zahl ausser null eingeb wird mir immer der letzte Kunde angezeigt?!? Warum?
Danke für die Hilfe!
Gruß Kai
nicht klar
03.02.2011 00:31:47
Erich
Hallo Kai,
"die X stehen für immer gleich Zahlen" verstehe ich nicht.
"Habe mal 3 Kunden getestet funktioniert bis jetzt" dagegen verstehe ich. Ist ja bei mir auch so.
"komisch ist dass wenn ich eine beliebige Zahl ausser null eingeb wird mir immer der letzte Kunde angezeigt"
verstehe ich wieder nicht.
Wie sieht deine (blau unterlegte) Tabelle aus, worin suchst du nach der Zahl außer Null?
Was kommt raus, wenn du nach der Zahl 0 suchen lässt?
Was kommt raus, wenn du nach einem Wert suchen lässt, der in der Tabelle vorkommt? Immer der letzte Kunde?
Das glaube ich nicht.
Ich vermisse ein vernünftiges Beispiel von dir.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: nicht klar
03.02.2011 14:54:39
Kai
Hallo Erich,
anbei meine Testdatei, die sollte klarheit schaffen.
https://www.herber.de/bbs/user/73383.xls
gebe ich null oder eins kommt #NV gebe ich z.B. 8 ein kommt der letzte Kunde in Spalte F.
Danke der Hilfe!
Gruß Kai
alles klar
03.02.2011 17:17:02
Erich
Hallo Kai - mit Gruß an Matthias von der DPAG, ;-)
in der Beispielmappe ist alles richtig.
Sind wir uns einig darüber, dass die Werte in den Spalten B und F, die Kennungen also, keine Zahlen sind, sondern Texte?
Sind dir uns auch einig darüber, dass - wenn man die Texte aufsteigend sortiert - "B" größer als "ABC" ist?
Sind dir uns auch einig darüber, dass - wenn man die Texte aufsteigend sortiert - "2" größer als "123" ist?
(Die Sortierung kannst du dir z. B. auch im Telefonbuch ansehen.)
Hast du dir mal in der Excelhilfe, auch mit Beispielen) genau angesehen, wie die Excelfunktionen
SVERWEIS und VERGLEICH arbeiten, insbesondere hinsichtlich des letzten Parameters?
(Diese Parameter sind jeweils mit 1 (entspr. WAHR) angegeben. Das ist Absicht.)
Bitte sieh die noch mal die beisden Tabellen an, die ich als Beispiele gepostet habe.
Was meinst du, welchen Sinn die Zeilen in der blau unterlegten Tabelle haben, in denen ">>" steht?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: alles klar
03.02.2011 17:53:00
Kai
Hallo Erich,
ich grüble noch, das mit dem frei hab ich noch nich kapiert :( aber:
"VERWEIS wählt dagegen immer den Wert, der in der letzten Zeile bzw. Spalte steht.
" erklärt mir dass er immer den letzten Kunden anzeigt.
Also, es sind tatsächlich reine Zahlen ohne irgendwelche Buchstaben, aber da einige mit 0 beginnen habe ich B und F als Text formatiert.
Die Formatierung hat aber nichts mit dem Arbeiten der Formel zu tun oder?
Gruß Kai
immer noch alles klar?
03.02.2011 18:40:27
Erich
Hi Kai,
"es sind tatsächlich reine Zahlen" sagt mir, dass wir uns bezüglich Zahlen/Texte noch nicht einig sind.
Wolltest du mir das schreiben?
1234567890123456789 - das sind 18 Stellen - kann in Excel keine Zahl sein.
Gib mal die Formel =1234567890123456789 in eine (mit Standard formatierte) Zelle ein.
Du wirst sehen, dass die letzten 4 Stellen schon beim Reinschreiben der Formeln durch Nullen ersetzt werden,
es bleibt die Formel =1234567890123450000 übrig. Das ist einfach dadurch zu erklären,
dass Excel Zahlen mit höchstens 15 Stellen Genauigkeit verarbeiten (und speichern) kann.
Also: Es sind tatsächlich keine Zahlen, sondern reine Texte, die nur aus Ziffern bestehen, nicht aus Buchstaben.
(Buchstaben würden hier nicht stören - es sind ja ohnehin Texte, und in Texten dürfen Buchstaben natürlich vorkommen...)
Die Formatierung der Zellen hat damit nicht so viel zu tun. Wesentlich ist der Wert, nicht das Format der Zelle.
In einer Zelle, die als Zahl (z. B. Prozent) formatiert ist, kann natürlich auch Text stehen.
Die Formatierung spielt hier eine Rolle nur auf diese Weise:
Wenn man eine Zelle als Text formatiert und danach etwas eingibt, ist der Wert ein Text,
ob darin nur die Zeichen "1" bis "9" oder auch z. B. Buchstaben oder andere Zeichen vorkommen, ist gleichgültig.
Nicht einmal eine Formel kann man als Formel eingeben - man sieht immer nur die Formel als Text.
Probier das einfach mal aus.
"Die Formatierung hat aber nichts mit dem Arbeiten der Formel zu tun" - Stimmt!
SVERWEIS und VERGLEICH sind unabhängig von der Formatierung. Sie verarbeiten bei dir Texte,
weil die Werte deiner Zellen Texte sind.
Noch mal die Frage: Ist klar, dass "2" größer als "123" ist?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
P.S.: Lässt Matthias gar nicht grüßen?
AW: immer noch alles klar?
03.02.2011 18:53:34
Kai
Hallo Erich,
danke für die ausfühliche Erklärung, jetzt sind wir uns einig es sind reine Texte da größer 15 stellen.
Ba bene =)
Wenn ich ehrlich bin, nein ist mir nicht klar warum 2 größer als 123 wenn ichs aufsteigend sortiere, kommt 2 vor 123 klar weil Sie kleiner ist, dacht ich bis jetzt zumindest. Aber du wirst mich sicherlich eines besseren belehren.
Gruß Kai
P.S.: Der hat Feierabend...
AW: immer noch alles klar?
03.02.2011 19:43:26
Erich
Hi Kai,
nimm mal ein leeeres Blatt und formatiere die Spalte A als Text.
Dann schreibe in die Spalten A und C (nicht B) die folgenden Daten:
 ABC
1Texte Zahlen
227 27
39 9
4123 123
551 51

Wie gesagt: Schreiben - also eintippen, nicht kopieren! Dann stehen in Spalte A Texte und in C2:C5 Zahlen.
Jetzt musst du nur noch die Spalte A und die Spalte C einzeln sortieren und dich vielleicht wundern.
Hast du mal in ein Telefonbuch geschaut, wie da vor dem A die Texte sortiert werden, die aus Ziffern bestehen?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: immer noch alles klar?
05.02.2011 11:40:54
Kai
Hallo Erich,
Text linksbündig und mit grünem dreieckchen und Zahlen rechstbündig das ist das erste was mir auffällt.
In der Tat ich wundere mich, das ist ja nach dem sortieren alles genau anders rum?!?!?!?!?
Warum ist das so?
Leider habe ich kein Telefonbuch, ich versuch das Papierlose Büro umzusetzen, ich such Nummern immer online...
Gruß Kai
Sortieren von Texten
05.02.2011 13:47:05
Texten
Hi Kai,
das solltest du dir selbst erschließen können.
Überleg dir mal die Sortierung, wenn du die zehn Ziffern durch Buchstaben ersetzt:
0 durch A, 1 durch B usw.
Du würdest doch auch "AXY" vor "B" einsortieren, oder?
Und genauso kommt "178" vor "2" - weil die "1" kleiner als die "2" ist.
Aber bei Zahlen kommt 178 natürlich nach 2.
Die Gänsefüße sind also wichtig. Sie zeigern hier, das das Texte sind.
(In den Excelzellen müssen natürlich keine Gänsefüße stehen, damit darin Texte stehen.)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Sortieren von Texten
05.02.2011 15:54:18
Texten
Hallo Erich,
klingt logisch, danke für die Erklärung plus die Geduld!
Also sollte es mit der von dir beschriebenen INDEX Formel klappen, richtig?
Gruß Kai
Kundengrenzen
05.02.2011 17:32:59
Erich
Hallo Kai ,
danke für deine Rückmeldung! Zur Geduld: Manchmal bin ich einfach unerbittlich! ;-)
Ja, mit dem INDEX und VERGLEICH sollte es auch klappen.
Aber mit der SVERWEIS-Formel wäre das viel einfacher, kürzer und schneller. Magst du SVERWEIS nicht?
Ist jetzt eigentlich klar, wofür die Einträge ">>" nötig waren?
Mal ein Beispiel:
Tabelle: (3, 7 und 9 sind die Kennungen)
3 kunde1
7 kunde2
9 kunde3
Was kommt bei Eingabe 6 raus? Jetzt kunde1.
Was aber, wenn kunde1 nur die Kennungen 3 und 4 haben soll?
Was soll dann bei Eingabe 5 oder 6 rauskommen? Wohl so etwas wie #NV oder ">>" oder "kein Kunde".
Das schreibt man dann einfach eine weitere Zeile in die Tabelle, die dann so aussieht:
3 kunde1
5 >>
7 kunde2
9 kunde3
Was kommt nun bei Eingabe 6 raus? >> - wie es sein soll. Und wie bei Eingabe 5.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Alternative zu Select Case
31.01.2011 20:55:21
Jowe
Hallo Kai,
Du benötigst neben der Tabelle mit der vom Scanner beschriebenen Zelle B2 (die Tabelle 'Scanner') und eine zweite Tabelle mit allen registrierten Kundennummern in Spalte A und den dazu passenden Kundennamen in Spalte B (die Tabelle 'Kunden').
Mit diesem Code, könnte es dann klappen:
Sub Worksheet_Change(ByVal Target As Range)
Dim c As Object
Application.EnableEvents = False
If Target.Address = "$B$2" Then
If Len(Target) > 20 Then
Target = Left(Target, 20)
End If
End If
If Target.Address = "$B$2" Then
With Sheets("Kunden").Range("A2:A40000")
Set c = .Find(Target, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Call Labelprint(Sheets("Kunden").Cells(c.Row, 2))
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
Else
MsgBox "'" & Target & "' ist kein registrierter Kunde!"
Range("B2").Select
End If
End With
End If
Application.EnableEvents = True
End Sub
Sub Labelprint(Kunde)
MsgBox "Das Label für '" & Kunde & "' wird gedruckt!"
'hier müßte der Code für's Drucken des Labels stehen
End Sub
Und Erich hat natürlich recht!
Obwohl der Scanner macht ja genau das, oder?
Gruß
Jochen

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige