Ruby versucht einen einfachen Weg zu finden, um die Anzahl der Atome in Molekülformeln einiger chemischer Strukturen zu bestimmen. Beispielsweise kann eine Zelle eine Formel wie C12H10N6F2 enthalten. In diesem Fall beträgt die Anzahl der Atome 12 + 10 + 6 + 2 = 30. Ruby hat ungefähr 300 dieser Formeln zu tun und hat sich gefragt, ob es eine Excel-Formel gibt, die dazu verwendet werden kann.

Erstens die schlechte Nachricht: Es gibt keinen einfachen Weg, dies zu tun.

Dort; Damit können wir anfangen, nach Lösungen zu suchen. Die von Ruby bereitgestellte chemische Beispielformel könnte einige zu der Annahme führen, dass das Zählen von Atomen ein einfacher Vorgang ist, bei dem die alphabetischen Zeichen durch etwas anderes ersetzt werden, sodass nur die numerischen Zeichen ausgewertet werden können. Als Beispiel ist hier Rubys chemische Beispielformel:

C12H10N6F2

Wenn Sie die alphabetischen Zeichen durch Pluszeichen ersetzen, erhalten Sie Folgendes:

+12+10+6+2

Sieht jetzt nach einer einfachen Formel aus, oder? Dies täuscht, denn während es in diesem Fall funktioniert, funktioniert es möglicherweise überhaupt nicht für Rubys andere chemische Formeln. Betrachten Sie die folgende chemische Formel, mit der viele Menschen vertraut sind:

H2O

Wenn Sie dieselbe Substitution durchführen, wird Folgendes angezeigt:

+2

Das Problem ist, dass es eine implizite Anzahl von 1 gibt, wenn es ein einzelnes Element gibt – zum Beispiel das Sauerstoffelement. Somit besteht H20 tatsächlich aus 3 Atomen.

Jetzt können wir also einen Weg finden, einfach die implizite 1 zu erklären, oder? Sicher; das kann gemacht werden. Dies kann am einfachsten und saubersten mit einem Makro durchgeführt werden, beispielsweise mit der folgenden benutzerdefinierten Funktion:

Function CountAtoms(ChemForm As String)

Dim sNewNum As String     Dim sTemp As String     Dim iNewAtoms As Integer     Dim iTotalAtoms As Integer     Dim J As Integer

sNewNum = ""

iTotalAtoms = 0

For J = 2 To Len(ChemForm)

sTemp = Mid(ChemForm, J, 1)

If sTemp >= "0" And sTemp <= "9" Then             sNewNum = sNewNum & sTemp         ElseIf sTemp <= "Z" Then             iNewAtoms = Val(sNewNum)

If iNewAtoms = 0 Then iNewAtoms = 1             iTotalAtoms = iTotalAtoms + iNewAtoms             sNewNum = ""

End If     Next J

iNewAtoms = Val(sNewNum)

If iNewAtoms = 0 Then iNewAtoms = 1     iTotalAtoms = iTotalAtoms + iNewAtoms

CountAtoms = iTotalAtoms End Function

Um diese Funktion in Ihrem Arbeitsblatt zu verwenden, verweisen Sie einfach auf die chemische Formel:

=CountAtoms(A1)

Befindet sich die chemische Formel in Zelle A1, gibt diese Funktion die gewünschte Anzahl zurück. Es funktioniert sogar mit Formeln wie den folgenden:

NaCl SbF6

Beachten Sie, dass diese auf zweistelligen Elementnamen beruhen, von denen es viele gibt. Es ist jedoch erforderlich, dass das zweite Zeichen eines zweistelligen Elementnamens nicht großgeschrieben wird.

Funktioniert dieser Ansatz also mit allen chemischen Formeln? Nicht wirklich; Es funktioniert nur mit den einfachen, die wir bisher behandelt haben. Sie sehen, chemische Formeln können sehr komplex werden. Betrachten Sie das folgende Beispiel:

2H2O

Wenn eine Anfangszahl so erscheint, ist die Formel mit diesem Wert zu multiplizieren. Somit hätte diese Formel anstelle der normalen 3 Atome in H2O 6 Atome.

Es wird schlimmer. Beachten Sie die folgenden gültigen chemischen Formeln:

Ca3(PO4)2 Al2(SO4)3(H2O)18

Beachten Sie die Klammern, gefolgt von einer Zahl. In dieser Nomenklatur gibt der Wert unmittelbar nach der schließenden Klammer an, wie viele der Moleküle in den Klammern sich im größeren Molekül befinden. Somit befinden sich im zweiten Beispiel 3 Moleküle SO4 und 18 Moleküle H2O im Gesamtmolekül. Dies wirkt sich offensichtlich auf die Anzahl der Atome in der gesamten Formel aus. Um die Komplexität zu erhöhen, können Klammern sogar verschachtelt werden:

CH3(C3H4(NH2)2)18CH3

Spaß, nicht wahr?

Dies kann immer noch mit einem komplexeren Makro angegangen werden. Anstatt das Rad hier neu zu erfinden, sollten Sie jedoch die Verwendung der auf dieser Site bereitgestellten Makros in Betracht ziehen, wenn Sie mit komplexen chemischen Formeln wie diesen arbeiten:

http://www.vbaexpress.com/kb/getarticle.php?kb_id=670

Beachten Sie, dass die Makros nicht als benutzerdefinierte Funktionen implementiert sind. Um sie zu verwenden, wählen Sie einfach die Zellen mit den Formeln aus, führen das Makro aus und dann ändern die Makros die Informationen in den Spalten rechts neben den ausgewählten chemischen Formeln. Vollständige Anweisungen sind im Code auf der obigen Website enthalten.

Sie müssen auch sicherstellen, dass Sie im Visual Basic-Editor reguläre Ausdrücke aktivieren. Sie tun dies, indem Sie Extras | wählen Verweise und scrollen Sie dann durch die verfügbaren Verweise, um die Option Microsoft VBScript Regular Expressions 5.5 zu finden. Stellen Sie sicher, dass das Kontrollkästchen links neben der Referenz aktiviert ist, und klicken Sie dann auf OK.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (13707) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.