Excel-Programmierung

N_O_K_I_A

Commander
Registriert
Jan. 2007
Beiträge
2.130
Moin,

ich bin relativ neu in der Programmierung mit Excel.
Ich hoffe das hier ist der richtige Bereich auch wenn es sich um Excel(programmierung) handelt.
Es geht darum, dass ich aktuell mit Partnummern arbeite.
Also für Bauteile, die haben ja immer eine bestimmte Syntax.
Da es meist sehr lange Listen sind (mehrere Hundert bis mehrere Tausend) ist es natürlich aufwendig alles so nachzuprüfen.
Nun wollte ich ein Skript in Excel basteln, welches die Partnummer selber zerlegt und die einzelnen Bestandteile (Baugröße, Widerstandswert, etc.) auf ihre Richtigkeit prüft.
Gedacht war, dass man in einer Excel-Datei mehrere Sheets hat, wo wichtige Prüfinformationen hinterlegt sind.
Wie z.B. die benötigten E-Reihen für Widerstandswerte.

Wie sollte ich da am besten vorgehen?
Sollte ich das über eine Funktion implementieren?
(Eine kleine Grundlage gibt es schon, aber sie ist sehr unübersichtlich und schlecht reproduzierbar, da alles oben in der schmalen Funktionsleiste eingegeben wurde ohne das typische Quell-Text Layout...)
Ich dachte dann eher daran, dies mit einem Makro zu realisieren, aber wie gesagt, bin neu auf dem Gebiet.

Programmiererfahrung habe ich bisher nur in C++ und etwas Basic.
 
Nähere Informationen und Beispiele helfen ungemein zu verstehen was genau du möchtest.
Wie ist die Nummer aufgebaut? Immer die gleiche Syntax?
 
Es ist nahezu immer die gleiche Syntax.
Gibt natürlich auch Abweichende, aber die kommen so selten vor, da kann man das auch manuell machen.

Beispiel:

RK73B1JTTD101J (RK73B = Bauteilfamilie, 1J = Baugröße, T/L = blei/bleifrei, TD (variabel von TD, zu TP und TDD, etc.) = Verpackung, 101 = Widerstandswert [101 = 100Ohm], J - Toleranz)

Das sind so die wichtigsten Sachen. Dabei kann es sein, dass wenn die Toleranz sich verändert (hier J das sind 5%), dass es dann 4 Digits werden beim Widerstandswert (bei Toleranzen wie z.b. F = 1%)
 
Den String kannst du auch
- per Formel auseinanderziehen und getrennt analysieren
- per "Text-in-Spalten" auf mehrere Zellen aufteilen und die getrennten Zellen wieder analysieren

Bleibt die Frage wie du es machen willst. Soll es dynamisch bleiben. Oder machst du das nur einmal... wie kommen die Daten in die Tabelle bzw wie werden diese dort erweitert/ geändert?
 
Bisher wurde es als Formel gelöst meinst Du? Die Formelleite oder Funktionsleiste kannst Du nach unten btw. auch noch größer ziehen. Ich denke schon, dass das mit Formeln zu lösen ist, wird aber sehr unübersichtlich. In VBA musst Du dich dafür aber auch erst mal einarbeiten, das ist auch nicht unaufwendig...

Edit: Ach Du hast Programmiererfahrung, dann sollte sich der Aufwand mit VBA in Grenzen halten.
 
Ja genau. Es geht zwar einigermaßen bis jetzt, aber wenn man was verändern will an einigen Funktionen, ist es sehr unübersichtlich, besonders wenn eine Anweisung über mehrere Zeilen geht.
Da mal eben schnell was ändern ist nicht so einfach und für einen Außenstehenden besonders nicht.

Und da ich schon Programmiererfahrung im Bereich C++ und ein bisschen Basic habe, dachte ich, dass der VBA-Weg vielleicht doch am Ende besser ist. Die Grundlogiken der Programmierung sind ja meist immer gleich.
Und es gibt ja viele gute Tut's im Internet mit denen ich dann versuchen wollte mich einzuarbeiten.
 
Hi,

ich melde mich mal wieder.
Ich mache langsam Fortschritte.

Ich habe mir für meine Übersicht auch mal ein Flussdiagramm erstellt, was es mir doch ziemlich erleichtert.

Jetzt bin ich soweit, dass ich die Zeichenkette komplett zerlegen und in andere Felder oder Variablen speichern kann.
Nun muss ich aber deren Gültigkeit überprüfen. Z.b. ob es bei einem Bauteil das angegeben ist, auch die Verpackung gibt oder nicht.
Eine Möglichkeit wäre es ja nun, dies direkt mit mehreren Abfragen im Code zu realisieren.
Allerdings ist dies nicht so praktikabel, wenn man mal eben was ändern möchte. So müsste man sich dann durch den Code zu der Abfrage wühlen und dort dann im Code arbeiten.
Ich habe dies jetzt mit ein paar Select-Case Anweisungen gemacht und dabei ist mir das aufgefallen.

Einfacher macht es natürlich, wenn ich eine Art "Lookup-Table" habe.
Also z.B. auf einem weiteren Excel-Sheet eine Tabelle mit allen Gültigkeiten.

Dort ist für jede Bauteilgruppe dann eingetragen, ob es das in der jeweiligen Baugröße gibt und mit der zugehörigen Verpackung. So bräuchte man dann nur eben schnell in der Tabelle Werte von True auf False ändern und umgekehrt.
Das macht die Sache natürlich viel einfacher.

Hab mal ein Bild angehängt.
Diese Tabelle ist für genau EINE Bauteil-Gruppe

Die Tabelle sagt aus in welcher Größe es verfügbar ist, danach dann die Toleranz und so ergibt sich ein Wertebereich der verfügbar ist sowie rechts zu sehen die Verpackung.
Mit der Toleranz möchte ich nun wieder eine Ebene tiefer gehen, dann darüber will ich prüfen, ob der Wert der eingegeben wird, auch so in der E-Reihe verfügbar ist.

Wie gehe ich in VBA da am besten vor?
Ich müsste ja irgendwie einen Befehl haben, der die Tabelle durchgeht und dann Werte zurückgibt.
Im Prinzip ja nur 0 oder 1 ob die Sachen gültig sind.




Lookup-TableBeispiel.png


EDIT:

Müsste man das mit Sverweis machen?
Schauen was eingegeben wird (z.B. 1T).
Dann mit Sverweis die Tabelle nach 1T durchsuchen, dann wird 1T zurückgegeben und dann mache ich eine Abfrage mit Wenn 1T = Rückgabewert-Sverweis dann True else False

Müsste man das so machen oder gibt es da irgendwelche Einschränkungen bzw. geht es auch anders/einfacher?
Ergänzung ()

Soweit so gut, klappt das mit dem Sverwies wie ich es mir dachte.
Allerdings gibt es ein gravierendes Problem.

WENN der Wert in der Tabelle NICHT gefunden wird, dann gibt Excel bei mir immer ein #NV zurück.
Normal wird dies in Excel einfach in die Zelle eingetragen.
In VBA führt dies aber dazu, dass es nicht weiterläuft und abstürzt bzw. ich debuggen soll.
Als letzten Wert im Sverweis habe ich "False" stehen.

Kann man das ändern?
Also das wenn er den Wert nicht findet, er einen definierten Wert zurückgibt?
 
Zuletzt bearbeitet:
Zurück
Oben