Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
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

Preisklassen- wie Werte in Klassen einordnen m.VBA

Preisklassen- wie Werte in Klassen einordnen m.VBA
Holger
Hallo,
ich habe ein neues Projekt aufgehalst bekommen, worüber ich mich freue, wenn nur der Termindruck nicht immer so brutal wäre. Dieses Mal möchte ich mir vorher einen Plan erstellen, damit ich nicht ständig alles wieder umschmeissen muss. Jetzt geht es darum, eine csv Datei einzulesen in eine Tabelle (sollte kein Problem sein) und Werte in Klassen einzuteilen. Ein produkt hat einen Preise und dazu soll die dazugehörige Preisklasse angezeigt werden.
Beispiel:
Preis 50 Euro, Preisklasse 50-100
Preis 70 Euro, Preisklasse 50-100
Preis 20 Euro, Preisklasse 0-20
Preis 120 Euro, Preisklasse aller über 100

Am Anfang dachte, ich kein Problem, aber jetzt scheitere ich doch an der Umsetzung.
Muss ich für jeden Preis jede Preisklasse durchgehen und schauen ob größer oder kleiner?
Rechnen mit VBA hatte ich noch gar nicht, deswegen stehe ich etwas auf dem Schlauch gerade
und in meinem Buch steht kaum etwas hierüber.
Könnt ihr mir bitte helfen?
Gruß+Dank
Holger
Was ist mit 20-50 ? (owT)
30.11.2010 13:17:48
Renee

Tippfehler hier die richten Klassen
30.11.2010 13:19:21
Holger
So muss es natürlich sein:
Beispiel:
Preis 50 Euro, Preisklasse 50-100
Preis 70 Euro, Preisklasse 50-100
Preis 20 Euro, Preisklasse 0-50
Preis 120 Euro, Preisklasse aller über 100
Warum mit VBA und nicht mit Formel?
30.11.2010 13:28:41
Renee
Hi Holger,
Preis sein in C2:
=WAHL(((C2100";"PK 50-100";"PK 0-50")

GreetZ Renée
Nie Formeln
30.11.2010 13:41:09
Holger
Hi Renee,
Formeln sind generell nicht erlaubt, es muss immer reiner VBA Code sein.
Auch temporäre Formeln im Prinzip nicht!
Wohl krank?, Dann nimm Word! (owT)
30.11.2010 13:54:45
Renee

Entschuldigung?
30.11.2010 14:04:13
Holger
Warum krank? Was hat das mit Word zu tun?
Es ist nun mal Vorgabe von oben, keinerlei Formeln zu benutzen.
Was auch in diesem Fall absolut richtig ist, wie ich finde.
Anzeige
Excel und keine Formeln!...ist wohl
30.11.2010 14:09:05
Renee
nicht ganz das Wahre ?, Holger
Formeln sind 1000x schneller als Code.
Code ist unverständlich, wartungsintensiv, unsicher und enthält zu 100% Fehler !
Sub ChoosePK()
Dim dblPreis As Double
dblPreis = Rnd() * 150 + 1
MsgBox WorksheetFunction.Choose((-(dblPreis  100", _
"Preisklasse 50-100", _
"Preisklasse 0-50"), vbOKOnly, dblPreis
End Sub

GreetZ Renée
AW: Excel und keine Formeln!...ist wohl
30.11.2010 14:23:19
Holger
Das ist wirklich Ansichtssache.
Formeln können gelöscht werden, sie müssen angepasst werden wenn sich am Aufbau der Datei etwas ändert und richtig kopiert werden, wenn etwas erweitert werden muss.
Plus wird das Endergebnis als extra Datei (ohne Code) an den Kunden weitergegeben
und generell dürfen an den Kunden keine Formeln geliefert werden, da Berechnungen
sonst offensichtlich wären (oder der User müßte erst die Werte als Inhalte einfügen
und wenn das nur einmal vergessen wird, wäre Polen offe *g*).
Kurzum: Managementvorgabe: Keine Formeln und daran muss ich mich eben halten ;).
Du hast nun die dritte unterschiedliche Lösung, die aber einfacher zu begreifen ist.
Gruß+Dank
Holger
Anzeige
So ein Quatsch! Management, wenn ich das...
30.11.2010 14:55:52
Luc:-?
…schon höre, Holger!
Oft eine Bande fauler, überbezahlter, wenig kreativer (…um mit der US-Diplomatie zu sprechen! ;-) ) Blender (von soziologischen Studien belegt!), die, wenn sie mal 'ne Idee haben, die auch unbedingt durchdrücken müssen, auch, wenn sie idiotisch ist…
Gerade ein Pgm, wenn es nicht ausgesprochen intelligent geschrieben ist, passt sich doch viel schwerer an Änderungen der Blattstruktur an als Fmln → nämlich nicht von allein; Fmln schon, denn das ist xl-implizit! Da ist es doch viel einfacher, eine Auslieferungsroutine zu schreiben, die alle Dateien passieren müssen, die ausgeliefert wdn sollen. Die sorgt dann dafür, dass die Tabellen unter speziellen Mappennamen als Werte gespeichert wdn. Ein AddIn in Outlook oder wo auch immer sorgt dann dafür, dass nur Dateien mit diesen Namen (kann auch ein spezieller Namensteil sein!) die Firma auf elektronischem Weg verlassen können.
Außerdem gibt's auch noch Kryptisierungsmöglichkeiten, bei denen sogar die Fml-Löschung mal vergessen wdn könnte, dann allerdings mit dem Effekt #NAME? beim Kunden. Dazu muss man nur Fktt (mit kryptischen Namen) schreiben, die die Standardfktt ersetzen; kann auch ganze Fmln zu Fktt machen. Auch solche Fktt passen sich Strukturverändd an. So etwas müsste in der Firma nur standardisiert wdn, damit alle MA es nutzen können.
Was sind denn das für hochgeheime Berechnungen, die der Kunde nicht kennen soll? Klingt nicht sonderlich vertrauens­würdig! Bei euch wäre ich nicht gern Kunde… :->
Gruß Luc :-?
PS: Da kann man mal wieder sehen, dass das eigentl Problem oft ganz woanders liegt! Hier ganz oben — im Management…
Anzeige
AW: So ein Quatsch! Management, wenn ich das...
30.11.2010 15:21:53
Holger
Also in meinem Fall paßt sich das Programm an selbst wenn sich der Aufbau ändern sollte.
Zum anderen was soll man dazu noch schreiben. Ich persönlich finde VBA Code auch
in den meisten Fällen besser, ist eben Ansichtssache und noch dazu total offtopic.
Ich brauche eben Lösungen in VBA, warum muss das breitgetreten werden?
Kunden Dateien mit Formeln zu geben, der Kunde will sowas ohnehin nicht.
Es hat schon alles seine Gründe und wenn man kaum was weiß, warum dann
gleich so herziehen?
Kann ich zwar nachvollziehen, aber...
30.11.2010 15:04:08
NoNet
Hallo Holger,
ich kann es nachvollziehen, dass es manchmal "Vorgaben höherer Ebenen" gibt, an die man sich halten muss - egal ob man möchte oder nicht. Nicht jeder Excel-Anwender ist in der Position, das Geschäftsgebahren selbst bestimmen zu können.
Grundsätzlich sind Formeln/Funktionen effektiver (schneller) und kompatibler als VBA-Code, allerdings lassen sich mittels VBA komplexere Zusammenhänge oft einfacher lösen.
Als Grund für den Verzicht auf Formeln/Funktionen die geplante Weitergabe an den Kunden zu nennen finde ich eher vorgeschoben.
- 1.) kann man ja wirklich alle Berechungen durch Werte ersetzen
- 2.) ist ein PDF-Handout oftmals praktischer und hierin sind keine Berechnungen enthalten
Aber wie gesagt : Ich verstehe es durchaus, wenn man sich an die von "oben" vorgegebenen Richtlinien halten muss.
In diesem Sinne, Gruß NoNet
Anzeige
AW: Preisklassen- wie Werte in Klassen einordnen m.VBA
30.11.2010 13:19:13
Rudi
Hallo,
kannst du per SVerweis ermittlen.
Sub ttt()
Dim arrPG(1 To 4, 1 To 2), dblPreis As Double
dblPreis = 25
arrPG(1, 1) = 0
arrPG(1, 2) = "0-19"
arrPG(2, 1) = 20
arrPG(2, 2) = "20-49"
arrPG(3, 1) = 50
arrPG(3, 2) = "50-100"
arrPG(4, 1) = 101
arrPG(4, 2) = ">100"
MsgBox Application.VLookup(dblPreis, arrPG, 2, 1)
End Sub

Gruß
Rudi
BahnhofsArrays ;-)
30.11.2010 13:24:29
Holger
Hallo Rudi,
wie fast immer verstehe ich nur Bahnhof.
Die Definition der Arrays ist noch nachzuvollziehen. dblPreis wäre wohl der Preis, den ich bekomme z.B 25 Euro? Was um Himmelswillen bedeutet dann die letzte Zeile, vor allem die 2 und die 1 am Ende des Klammernpaares?
Rudi, langsam liebe ich deine Codes, denn sie fordern mich als Anfänger wirklich so richtig ;).
Deinen Code gestern habe ich nun auch im Einsatz, da dieser viel leichter zu pflegen und anzupassen ist.
Dafür nochmal ein Dankeschön.
Gruß
Holger
Anzeige
Noch eine ARRAY-Alternative
30.11.2010 13:31:03
NoNet
Hallo holger,
hier noch eine ARRAY-Variante mit VERGLEICH (VBA: Match) und ARRAYs :
Sub PGPerArray()
Dim arPG(2), dblWert As Double
'Preise :
arPG(0) = Array(0, 20, 50, 100)
'Preisgruppen :
arPG(1) = Array("PG 0 bis =100")
dblWert = 20
MsgBox arPG(1)(Application.Match(dblWert, arPG(0), 1) - 1)
End Sub
Gruß, NoNet
Rechnet richtig, nur warum?
30.11.2010 14:00:47
Holger
Hi NoNet,
Vielen Dank. Klappt bestens bei meinem ersten Test.
Nur verstehe ich auch hier trotz VBA Hilfe die Syntax nicht so recht.
dblWert ist der Suchbegriff aber der Rest?
Kannst du mir das an dem Beispiel erklären?
MsgBox arPG(1)(Application.Match(dblWert, arPG(0), 1) - 1)

Anzeige
siehe Hilfe zu Excel-Fkt. VERGLEICH() owT
30.11.2010 14:09:38
Rudi
Index eines ARRAYs anzeigen
30.11.2010 14:18:55
NoNet
Hallo Holger,
das Prinzip ist ganz einfach :
Das ARRAY arPG(0) beinhaltet die Werte 0,20,50,100 - Das ist die Preisstaffelung
Das ARRAY arPG(1) beinhaltet die Werte "PG 0 bis <20" etc. - Das sind die Preisgruppentexte
dblWert ist natürlich der gesuchte Preis
Mit Application.Match(dblWert,arPG(0),1) wird gesucht , an welcher Stelle (INDEX) der Wert von dblWert im Array arPG(0) enthalten ist und falls nicht EXAKT gefunden, der nächstkleinere Wert angenommen (daher die ,1 am Ende). Das entspricht exakt der VERGLEICH()-Funktion in Excel-Tabellenblatt (siehe Onlinehilfe).
Wird der Wert von dblWert (oder der nächstkleinere Wert) z.B. an der 2.Stelle gefunden, soll aus dem ARRAY arPG(1) der 2.Wert angezeigt werden (also die passende PG).
Da die Werte eines ARRAYs standardmässig mit Index 0 beginnen ist der "2.Wert" des ARRAYs arPG(1) der Index 1 (also : 2-1, daher am Ende die -1) .
Es ist nicht einfach, ARRAYs auf Anhieb zu verstehen, aber noch schwieriger ist es, die funktionsweise von ARRAYs zu erklären.
Ich hoffe, Du hast es dennoch ansatzweise verstanden.
Mehr zum Thema : siehe hier : http://www.online-excel.de/excel/singsel_vba.php?f=152
Gruß, NoNet
Anzeige
AW: Index eines ARRAYs anzeigen
30.11.2010 14:44:55
Holger
Hi NoNet,
Vielen Dank für deine Mühe.
wenigstens das habe ich nun schon besser verstanden, nach VERGLEICH zu suchen in der Hilfe, darauf wäre ich nicht gekommen. Die Sache mit dem -1 ist noch nicht ganz klar, aber ich lese jetzt erstmal die Hilfe VERGLEICH und spiele danach etwas rum, dann wird das bestimmt.
Nochmal ein großes Dankeschön, ich will eben immer alles verstehen, was ich mache.
Holger
Was um Himmels Willen ...
30.11.2010 13:47:31
Rudi
Hallo,
hab ich doch geschrieben.
Das ist die VBA-Variante von SVERWEIS.
Gruß
Rudi
AW: Was um Himmels Willen ...
30.11.2010 13:55:08
Holger
Hallo,
natürlich habe ich in der VB Hilfe sofort nachgeschaut und nur Worksheet VLookup gefunden.
Das erste Argument des Befehles verstehe ich, es ist das Suchkriterium.
Aber die beiden anderen, 2 und 1, verstehe ich nicht!
Anzeige
AW: Was um Himmels Willen ...
30.11.2010 14:54:13
ing.grohn
Hallo Holger,
mit 2 ist der Spaltenindex gemeint (welchen Wert er zeigen soll, wenn gefunden),
die 1 ist Bereich_Verweis (0 oder Falsch wenn genau, 1 oder Wahr wenn nächst kleinerere Wert gilt, wenn nicht exakt) (SVWEIS)
Mit freundlichen Grüßen
Albrecht

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige