Hallo zusammen,
ich arbeite derzeit an einer kleinen Preiskalkulation für ca. 100 Produkte. Dazu habe ich eine Preisliste vorliegen, in der wichtige Daten zum jeweiligen Produkt und den Einzelteilen gespeichert sind.
Aufbau wie folgt: [Name] - [Preis] - [...] etc
Wichtig sind hier erstmal nur die ersten beiden Spalten. Die jeweiligen Endprodukte sind ebenfalls in der Preisliste vorhanden (mit dem Einkaufspreis bei Fremdbezug). Ziel soll es sein, auf anderen Tabellenblättern eine Stückliste für die fertigen Produkte zu erstellen und die Kosten für die Eigenfertigung dem Fremdbezug gegenüber zu stellen.
Mein Problem liegt nun darin, dass viele verschiedene Endprodukte aus den Selben Einzelteilen bestehen und ich nicht jedes Mal über einen SVerweis suchen möchte. Gewünscht ist beispielsweise die Eingabe von =getPrice("Hier Produktname") (oder: Verweis auf Zelle, in der der Produktname steht), was zur Ausgabe des jeweiligen Preises führt.
Ich habe bisher folgendes erstellt:
Im Modul "StringOperations":
Option Compare Text
Public Function equalsIgnoreCase(ByVal stringA as String, ByVal stringB as String) as Boolean
if (a = b ) Then
equalsIgnoreCase = True
else
equalsIgnoreCase = False
End If
End Function
Im Modul "PriceListApplication":
Public Function getPrice(ByVal item as String) as String
Application.Volatile
On Error GoTo fin
Dim retVal as String: retVal = "N/A"
' Iterate over cells to find given item
For Each datarow In Range("PriceCalculation!Prices").Rows
If StringOperations.equalsIgnoreCase(datarow.Columns(1).Value, item) = True Then
retVal = datarow.Columns(2).Value
Exit For
Next datarow
fin:
getPrice = retVal
End Function
Es funktioniert bisher sehr gut, allerdings wird durch
Application.Volatile
die Berechnung komplett neu durchgeführt, wenn irgendeine Zelle verändert wird, was meiner Meinung nach bei vielen Datensätzen eher ungeeignet ist.
Nun meine Frage:
Gibt es eine optimalere Lösung für mein Problem? Eine 'bessere' Lösung wäre das Verwenden von sverweisen, allerdings soll die Kalkulation später auch von Anderen ergänzt und bearbeitet werden, die sich nicht unbedingt mit Excel etc auskennen werden.
Vielen Dank schonmal im Voraus
Cyntho
|