Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
412to416
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
412to416
412to416
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Buchstabenfolgen und Zahlen auslesen

Buchstabenfolgen und Zahlen auslesen
michael
Hallo im Forum,
ich habe folgendes Problem.
in einer Zelle stehen folgende Formeln z.B.
C6H10O od
C12H24
C3H6O3
C2H3O2Na
aus dieser Formel soll nun das C, H, O, Na und andere Elemente ausgelesen werden und aus einer Tabelle die zugehörigen Massenwerte gesucht werden. Anschließend die Zahl die nach dem/n Buchstaben folgt ein oder zweistellig (folgt keine Zahl ist das gleich 1). Das selbe mit dem nachfolgenden Buchstaben.
Wie lässt sich das realisieren?
Hat jemand so etwas ähnliches schon mal geschrieben?
Danke und viele Grüße
Michael
AW: Vielleicht ist hier bereits etwas für Dich bei
Uwe
Hallo, Michael!
https://www.google.de/search?hl=de&ie=UTF-8&oe=UTF-8&q=Periodensystem+EXCEL&btnG=Suche&meta=
http://www.chemie.de/tools/mm.php3?formel=C6H10O
http://www.chemlin.de/download/excelelements.htm
Das Auswerten der Formel selbst wird wohl, wenn man sich nicht auf einfache Gebilde beschränken will nir ex VBA möglich sein, wo der die Zeichenkette unterteilt wenden muss. Sofern keine weiteren Lösungsvorschläge vorhanden sind, versuche ich später eine Lösung zu finden.
Anzeige
AW: Vielleicht ist hier bereits etwas für Dich bei
michael
Hallo Uwe,
danke für deine Hilfe!!
Hat etwas gedauert bis ich die Zeit hatte mich durch deine Links zuklicken bzw selbst zugoggeln...
Sehr interessant ist der letzte link. Das Progarmm tut eigentlich das was ich suche.
Jedoch kann ich das Makro welches die Molmasse berechnet nicht finden. Ist wahrscheinlich geschützt. Falls es doch zu verwenden ist kannst du mir vielleicht sagen wo ich den Code finde.
Mein problem ist aus einer Liste von einigen 100 Verbindungen (summenformeln) die Molmassen zu ermitteln. Wenn ich nun diese Programm in meine Tabelle einbinden könnte und in einer schleife die summenformel einlesen (statt eintippen) könnte und die Ausgabe in meine Tabelle zurückgegeben wird (statt neben der Eingabe) dann wäre glaube ich mein Problem gelöst... Die Ein- und Ausgabe zu ändern sollte da wohl das geringere Problem sein? Die schreiben was von VBA-Programm? Das ist doch ein Excel Macro, oder?
Hast du eine Idee?
Danke und viele Grüße
Michael
Anzeige
AW: Vielleicht ist hier bereits etwas für Dich bei
Uwe
https://www.herber.de/bbs/user/5409.xls
Hallo, Michael!
Zwischenzeitlich konnte ich mir dei Zeit nehmen, und mich um ein VBA-Programm zu kümmern. Dabei konnte mich K.Rola bereits mitteilen, warum ich eine "Zellenformel" nicht entwickeln kann, da ich mit EXCEL 2000 arbeite ( http://xlforum.herber.de/messages/415894.html ).
Da Du nun von ca. 100 chem. Summenformeln schreibst, die anscheinden in einer Tabelle vorhanden sind, ist als erstes zu klären, wie auf die Formeln zugegriffen werden kann.
Bezugnehmend auf den von dir angegebenen Level zu VBA habe ich mal ein "Gerüst" erstellt, das ggf. als weitere Bearbeitsgrundlage verwendet werden kann. Leider konnte ich, wie oben erwähnt, keine Funktion testen, da diese Art wohl der Aufgabenstellung am besten gerecht würde.
Die Werte der Tabelle "EListe" habe ich aus einem zuvor angegeben Link entnommen. Dort sind Werte für die Masse und die durchschn.Masse eines Element angegeben, die von mir nicht weiter geprüft wurden.
Um zu sehen, was in den einzelnen Programmteilen geschieht, könnte in einem ersten "Übungsschritt" das Makro über den Aufruf Alt+F8 im Schitt-Ablauf gestartet werden. Mit den Tasten F8 kann dann schrittweise die Ausführung verfolgt werden. Mit F5 wird das Programm bis zum Ende ausgeführt. Weitere Handhabungshinweise bitte ggf. aus der Menüleiste entnehmen.
Das Layout wird vermutlich Deinen Wünschen nicht gerecht. Sofern es sich um Formatierungen handelt, sind diese ggf. manuell nachzuarbeiten. Sofern der Umfang der Ausgaben sich nur auf das Mol-Ergebnis beschränken soll, erkennst Du vielleicht, wie Du den Ausgabeteil so verändern mußt, dass das gewünschte Ergebnis geliefert wird. Die Zeilenberechnung (rResult enthält die Zeilennmmer, an der die Ausgabe einer Formel startet; der Ansatz zur Ermittlung dieser Zahl ist bedingt durch den Zeilenvorspann und der Anzahl der Zeilen je Summenformel).
Viel Erfolg, und wenn Fragen, dann haben wir hier eine Basis.
Gruß!
Anzeige
...werde ich testen-wofür ich etwas Zeit brauche..
michael
Hallo Uwe,
SUPER Arbeit von dir, ich denke damit komme ich ein gutes Stück weiter!
Ich werde mich erst etwas später ausgiebig damit beschäftigen können (Da meine VBA Kenntnisse mäßig sind wird auch das etwas dauern...)
Nochmal vielen Dank
Bis später
Michael
Welchen Link hast du für die Werte der EListe verwndet?
AW: EListe ist ein Auszug aus ...
Uwe
... der Tabelle "Element m. Isotopen" aus der Arbeitsmappe, die im ZIP-File von der Seites des dritten Links in meiner ersten Antwort, zum Herunterladen zur Verfügung steht.
Die Ergebnisse des "Arbeitsgerüstes" habe ich mit den Möglichkeiten stichprobenartig geprüft, die in dem zweiten Link aus meiner ersten Antwort zum Thema geboten wird.
Gruß!
Anzeige
AW: EListe ist ein Auszug aus ...
michael
Hallo Uwe,
danke für die Infos, dachte mir schon fast dass dies die Werte aus Ref 3 sind.
Bin schon ziemlich weit in dem Macro vorran gekommen...
eine Sache ist mir noch unklar:
Dim El(20) As Elements, formel As String, i As Integer, maxItem As Integer
bzw
'die Ergebnisse stehen in der Variablenfeld vom Typ El (max. 20 Einzelelemente!)
folgt aus Dim El(20) die Begrenzung auf 20 Elemente?
was ist ein Variablenfeld vom Typ El?
Ansonsten wahnsinnig interessant wie man die Formel von li nach rechts in ihre Teile zerlegt, um dann die Teilmolmassen zur gesamten Molmasse auf zu addieren.
So ich werde mich mal schlafen legen und mich morgen weiter damit beschäftigen.. d.h. per F1 mehr über die Befehle des Macros herrauszufinden.
Nochmals Danke für das tolle Macro
Michael
Anzeige
AW: Daten-Type und Array
Uwe
Hallo, Michael,
leider habe ich an dieser Stelle nich genügend Rücksicht darauf genommen, dass Du dieses Listing als "Einstig" in die VBA-Programierung nutzen wirst. Daher versuche ich gerne Fragen zu beantworten.
Die Einzelvariable ist ein Wert, der an einer bestimmten Stelle im Speicher hinterlegt ist. Die Adresse wird über den Variablennamen angesprochen.
Ein Variablenfeld (Array) sind nun nichts anderes als eine Anzahl von Variablen, die vom gleichen Typ sind und hintereinander im Speicher abgelegt werden. Um die Werte nun zu erhalten, benötigt man die Adresse der ersten Variablen des Feldes (Startindex in der Regel 0 oder 1), von der man nun über einen gültigen Index des Feldes, eine bestimmte Speicherstelle in der Adressenfolge ansprechen kann.
X(12) ist also der zwölfte Wert nach dem Start, wenn die Speicherstelle des Startwertes mit dem Index 1 beschrieben wird.
Nun habe ich in dem Programm gleich noch eine sogenannten benutzerdefinierten Typ einer Variabeln angelegt, nähmlich den Datentyp Elements.
Dieser Datentyp besteht nun aus genau den, bei der Deklaration benannten Einzelwerten.
Ein benutzerdefinierter Datentyp kann also ähnlich wie eine Dateikarte wirken, auf der in einer bestimmten und festen Ordnung Eigenschaftsfelder vorhanden sind, die zur Aufnahme von Beschreibungsmerkmale eines Objektes dieses Types dienen.
Es bestimmt leicht einsichtig, dass diese Daten hintereinander im Speicher abgelegt werden können.
Eine solche "Karteikarte" enthält die Einträge:
  • Chemisches Symbol (chZ),
  • Anzahl der Teile in der Summenformel (Anz),
  • Masse (Masse),
  • durchschn. Masse (DMasse)
    Eine Instanz der "Karteikarte" ist vom Typ Element und wird von mir El genannt (Deklaration DIM El as Elemtens). Nun besteht die (chem.) Summenformel in der Regel aus mehreren Elementen, so dass ich in der Regel auch mehrere der Karteikarten benötige, um alle Teile einer gegeben Summenformel zu erfassen. Da dieses "Karteikarten" vom gleichen Typ sind, können sie als Array von Datentyp Elements behandelt werden und daher dei endgültige Dekleration:
    DIM El(20) as Elements
    Es wird nun klar sein, dass mit diesem "Stapel" von "Karteikarten" jede chem. Summenformel erfasst werden kann, die nicht mehr als 20 Einzelelemente enthält. Bei Bedarf kann also die 20 nach Erfordernissen angepasst werden.

    Da dieses Datenfeld El(20), nur beim Auswerten eienr Summenformel temporär gebraucht wird (mit maxItem wird die Anzahl der für die betrachtete Summenformel benutzen "Dateikarten" gesetzt), ist klar, dass mit der Begrenzung auf 20 Einzelelemente, keine Einschränkung auf die Anzahl der zu verarbeitenden Summenformeln verbunden ist.
    Ich hoffe, dass ich diesen Teilaspekt des Programmes verständlich darstellen konnte, ansonsten gilt: Bei Fragen, fragen!
    Gruß!
    P.S.
    Die Erkennung der Einzelelement hängt direkt mit der korrekten Groß-/Kleinschreibung zusammen, da ein fstgestelleter Kleinbuchstabe an den zuvor festgestellten Großbuchstaben gebunden ist. Ausgegangen wird bei der Logik davon, dass nur Chemische Elemente Erkannt werden können, die aus mindestens einem gültigen Großbuchstaben und optionell mit einem nachfolgenden Kleinbuchstaben bestehen.

  • Anzeige
    AW: Daten-Type und Array
    michael
    HAllo Uwe,
    super ausführliche UND verständliche Hilfe!!! Das hilft mir weiter.
    Nachdem du auch die Massenanteile der Elemente berechnet hast, nehme ich an dass du einen chemischen Background hast. Hast du noch einen Tipp für Internetseiten die kleine Tools z.B. in Excel für chemische Probleme haben? Habe momentan kein spezielles Bsp. aber manchmal ist es ja auch nur interessant zu schauen was es denn so gibt.
    Nochmal DANKE
    Viele Grüße
    Michael
    AW: Haben wir nicht alle einen ...
    Uwe
    ... "chemischen Background" ;-). Kenntisse zur Chemie gehen über das Schulwissen nicht hinaus, so dass ich auch keine weiteren Hinweise zu Excel-Tabellen zum Thema bisher gesucht habe. Allerdings, bei geeigneter Suchwortwahl und Verknüpfung dieser Worte(CHEMIE EXEL VBA...), sollte sich, mit Hilfe von "Suchmachinen", eine erträgliche "Ernte" beim Suchen einfahren lassen.
    Gruß!
    Anzeige
    Wie funktioniert...
    michael
    ..das mit den Zahlen? Wie stellt das Programm fest ob eine 1 od 2-stellige Zahl folgt?
    Danke
    Michael
    AW: Wie funktioniert...
    Uwe
    Hallo, Michael!
    Bewusst habe ich Deine zeitlich später gestellte Frage, vor dieser, zeitlich früher gestellten Frage beantwortet.
    Auch nehme ich an, dass das Listing des Programmes Dir vorliegt bzw. für Dich einsehbar ist.
    Sicher wird auch bereits erkannt sein, dass duch schritteweises Auswerten und Streichen der ausgewerteten Teile in der jeweiligen Restzeichen die Eintragungen auf den zuvor besprochenen "Karteikarten" erfolgt.
    Dabei habe ich mir ein paar wichtige, unveränderbare Randbedingungen Deiner Aufgabenstellung zu nutze gemacht:
  • Eine (chem.) Summenformel beginnt immer mit einem Großbuchstaben
  • Die Großschreibung des ersten Buchtaben eines Elements und die Kleinschreibung eines möglichen zweiten Buchstaben zum Molekülsymbol. In dem Funktionsblock GetchZ werden diese Bedingungen zur Erledigung der Aufgabe umgesetzt.
  • Nach einer Zahl (Anzahl der Moleküle) wird entwedert nichts weiter folgen oder aber es ist ein neuer Großbuchstabe zu erwarten.
    Du siehst also, dass andere Schreibweisen mit diesem Programmablauf nicht zum Ziel führen.
    Das Programm ruft also aus seinem Hauptteil einmal die Auswertung eines möglichen chem. Symbolnames auf (GetchZ) und ist dieses erfolgreich gelaufen (Eintrag in der "i"-ten "Karteikarte" zur Summenformel), wird zusätzlich untersucht, ob eine Zahl (Anzahl) angegeben ist oder ob die 1 in das betreffendes Feld des Array-Elementes El(I).Anz eingetragen werden soll. Steht also am Beginn des aktell verleibenden Restzeichenkette eine Zahl if val(fml)>0, dann eledige die Aufgabe der funktion GetAnz (andernfalls ist das Fehlen einer Zahl am Beginn des Rest-Strings als Anz=1 interpretiert, ohne dass weitere Aktionen am Reststring von nöten sind).
    In der Funktion GetAnz wird nun folgendes erledigt:
    a1 = Val(fml)
    Die Zeichenkette fml wird, soweit es möglich ist ( = bis zum auftretten eines nicht numerischen Zeichens 0...9), in die Integervariable a1 geschrieben. Hier steht also, wenn die Kette "212CoH2O" enthielt, eine 12 in der Speicherstelle mit dem Varuablennamen a1.
    GetAnz = a1
    Die Rückgabe eines Ergenissesaus einer Funktion erfolgt mindestens über den Namen der Funktion, der intern dafür den entspechenden Speicherplatz bereirgestellt hat (Function Name(...) as Integer). In dem Beispiel also wird die 212 zurückgegeben,

        alen = 1
    While a1 $gt; 9
    a1 = a1 / 10
    alen = alen + 1
    Wend</b>
    In dieser While ... Wend, die in Worten gefasst folgendes ausführt, nachdem zuvoe ein "Zahlenstellenzähler", <b>alen</b>, auf 1 gesetzt worden ist:
    <b>Solange a1 größer als 9 ist,
    teile den Wert von a1 durch 10 (nun ist a1 eigentlich 21.2,
    da aber a1 vom Typ Integer ist,
    ist a1 nun 21)
    Erhöhe den Zahlenstellenzähler um 1
    prüfe erneut
    

    Zum abschluß, nachdem der While-Wend-Block verlassen wurde, steht in alen die Anzahl der Ziffern der Zahl bereit, und es kann nun die Dtringbearbeitung (Streichung der ersten alen-Zeichen) erfolgen, anders formuliert, nimm den Rest des Stings ab dem ersten Zeichen nach der Zahl (alen+1):
    fml = Mid(fml, alen + 1)
    Das war's. Die Antwort auf die Frage, wie gebrochene Zahlen in der Zeichenkette (12.34 oder 12,35, je nach Läöndereinstellung) verarbeitet werden und warum dies auf diese Weise dann geschieht, soll als kleine Aufgabe offen bleiben (Vorischt: Falle).
    Guß,
    Uwe
  • Anzeige
    AW: Wie funktioniert...
    Michael
    Hallo Uwe,
    SUPER, VIELEN DANK für deine ausführliche Hilfe und die Mühe die du dir mit mir machst!!
    So nach und nach verstehe und lerne ich mehr und mehr.
    ...für heute ist erst mal genug
    Michael
    Hab nen Fehler entdeckt...
    michael
    Hallo Uwe,
    beim Testen ist mir ein Fehler für S aufgefallen:
    Der Grund ist dass als S bereits schon das davor kommende Si akzeptiert wird.
    Ähnliches passiert wenn ich die Zeilen von He (Helium) und H (Wasserstoff) vertausche und H berechne. Dann ergibt der Buchstabenvergleich He statt H, da steckt ja ein H drin, nur ist die Übereinstimmung nicht exakt.
    Hast du eine Idee wie der Vergleich nur die exakte Übereinstimmung akzeptiert?
    Danke und viele Grüße
    Michael
    Anzeige
    AW: Hab 'nen Fehler behoben...
    Uwe
    Hallo!
    Bei der Find-Methode gibt es Paramentereinstellungen, die standardmäßig gemäß der letzten Einstellung gesetzt sind.
    Leider habe ich versäumt, diese in den beiden Zeilen, wo die Methoden eingesetzt werden, auf die notwendige Einstellung zu setzen, so dass eben nach dem gesamten Suchwort gesucht wird (LookAt:=xlWhole).
    Die beiden entsprechenden Zeilen sind so zu ergänzen:
    El(i).Masse = wsE.Cells(wsE.Columns(2).Find(El(i).chZ, LookAt:=xlWhole).Row, "F")
    und
    El(i).DMasse = wsE.Cells(wsE.Columns(2).Find(El(i).chZ, LookAt:=xlWhole).Row, "G")
    Nebenei bemerkt, wenn man so auf ein Programmteil wieder einen Blick wirft, kommen einen hin- und wieder Ideen, wie man Bereiche und Abfragen anders gestalten hätte können, so speziel des Tiles, in dem es um die Ermittlung der Zahlenlänge (wieviel Ziffern) geht. Die Aufgabe kann man statt durch den Einsatz der While-Wend-Konstruktion, auch durch String-Operartionen lösen: alen = Len(CStr(a1)) oder man verwendet gleich direkt die Operation zur Kürzung des Strings fml. Dadurch verkürzt sich die gesamte Funktion auf diese Zeilen:
    Function GetAnz(ByRef fml As String) As String
    GetAnz = Val(fml)
    fml = Mid(fml, Len(CStr(GetAnz)) + 1)
    End Function
    

    Wnn Du es mit dem Einbau der Änderungen nicht klappen sollte, lade ich die Arbeitsmappe auf den Server hoch.
    Gruß!


    ein Problem mit S... Typen unverträglich...
    michael
    Hallo Uwe,
    ich hab ein seltsames Problem.
    Ich habe dein Macro für meine Belange etwas überarbeitet.
    Deine urspüngliche Version verarbeitet S,
    die überarbeitete nicht!?
    https://www.herber.de/bbs/user/5582.xls
    Die beiden Versionen unterscheiden sich hauptsächlich darin, dass ich die andere Liste aus der Ref 2 nehme. Dadurch ändern sich die Zeilen und Spalten für die Element-Daten.
    Alles scheint tadellos zu funktionieren außer beim Element Schwefel "S"
    Egal ob S oder SO2 u.a. S-Verbindungen
    Ich sehe auch keinen Unterschied. S ist in beiden Listen groß geschrieben und die Molmasse eine Komma-Zahl - was bedeutet da Typen unverträglich?
    Hast du eine Idee?
    Danke und viele Grüße
    Michael
    AW: wenn ich Programm wär', würd' ich das ...
    Uwe
    ...auch somelden, Michael!
    Du hast die Tabellen ausgetauscht, da ist der Unterschied! Deine Suche nach dem S in der dritten Spalte dieser neuen Tabelle, landet immer in der zweiten Kopfzeile, da diese dort ein S als Spaltenüberschrift enthält.

    In der Spalte E der zweiten Zeile steht allerdings eine Eintrag, der nicht als Datentyp double intepretiert werden kann.
    Ändere den Kopfzelleneintrag von S in z.B. _S und die Sache wird funktionieren.
    Gruß!
    ... du bist genial...
    michael
    ...ich hab innerhalb der Tabelle alles mögliche ausprobiert aber auf die Spaltenüberschrift bin ich nicht gekommen. Ich vermute dass ich dachte, dass zwar nur ein S zu sehen ist aber Symbol o.ä. in der schmalen Zelle steht (wie in der anderen Liste)... Schon blöd von mir.
    Noch eine kurze Erklärung warum ich die andere Tabelle benutze.
    Um die Molmasse einer Verbindung zu ermitteln geht man von der natürlichen Zusammensetzung der Elemente aus - das ist die durchschnittliche Molmasse (ermittelt über die %-ualen Anteile). Da ich in der einen Tabelle einen Fehler bei der Sauerstoffmasse entdeckte, der in der anderen nicht vorhanden war und auch nur die durchschnittlichen Molmassen brauche, entschloss ich mich für die Tabelle "Elemente o. Isotope"
    Nochmal vielen Dank Uwe,
    noch einen schönen Abend
    Michael
    command button
    michael
    Hallo Uwe,
    sorry, ich hoffe ich gehe dir nicht schon auf die Nerven....
    Kannst du mir vielleicht noch erklären wie du den Command button erstellt hast. Er läßt sich nicht markiern oder seine Eigenschaften (Verknüpfung) erfragen. Ich sehe aber auch keine Formularvorlage...
    Danke
    Michael
    AW: command button
    Uwe
    Hallo!
    Nun, ich will schrittweise vorgehen, um abzustimmen, dass wird die gleichen Symbole vor Augen haben.
    Du solltest zuerst schauen, ob Du in Deiner EXCEL-Arbeitsmappe die Symbolleiste, die die Symbole zur VBA-Programmierung enthält, sehen kannst. Ggf. musst Du diese erst über die Menübefehle Extras ... Anpassen ... Registerblatt "Symbolleiste" - dort in der Auswahlbox bei "Visual Basic" ein Haken setzen - einfügen.
    Hiermit hast Du sowohl den Zugang zum VBA-Umgebung als auch über die zwei Schaltflächen einen direkten Zugang zu der Werkzeugen der der Steuerelemente (Icon: gekreutzer Hammer und Schraubenschlüssel) und zur Umschafltung in den Entwurfsmodus (Icon: Reißschiene, Dreieck und Stift).
    Letzteres Symbol ermöglicht, den Entwurfsmodus ein- bzw. auszuschalten. Befidest Du Dich im Entwurfsmodus, so kannst Du ein Steuerelement anklicken und es erhält den "Entwurfs-Focus" (Rahmen mir "Griffmarkierungen" in den Ecken und Seitenmitten).
    Der Mauszeiger wechselt sein Aussehen zu einem Pfeilkreuz mit Mauszeigerpfeil, sobald der Mauszeiger in den Einzugsbereich des Steuerelements tritt. Nuzn sind Veränderungen der Position und Größe des Elementes möglich. Aber Befehle aus einem lokalen Menü sind anwhlbar, sobald (in der REgel) eine Rechtsklick bei diesem Maussymbol erfolgt. Hier findest Du dann die "Pforten" zu den Eigenschaften und auch Befehlszeilen, die sich hinter dem Steuerelement verbergen.
    Gruß, und bitte keine falsche Zurückhaltung bei sinnvollen Fragen, denn schließlich lerne auc ich hier aus Antworten auf Fragen, die andere stellen.
    Uwe
    dass, solbald der ie -
    und
    findest bzw. eingebnden hast.

    305 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige