Ruby试图找到一种简单的方法来确定某些化学结构的分子式中的原子数。例如,一个单元格可能包含诸如C12H10N6F2的公式。在这种情况下,原子数为12 + 10 + 6 + 2 =30。Ruby有大约300个这样的公式可以做,并且想知道是否有一个Excel公式可以用来执行此操作。

首先,坏消息是:没有简单的方法可以做到这一点。

那里;这样,我们就可以开始寻找解决方案了。 Ruby提供的示例化学公式可能使某些人认为对原子计数是用其他字符替换字母字符的简单过程,因此仅可以评估数字字符。例如,这是Ruby的示例化学式:

C12H10N6F2

如果将字母字符替换为加号,则会得到以下信息:

+12+10+6+2

现在看起来像一个简单的公式,对吧?这具有欺骗性,因为尽管它在这种情况下可以工作,但对于Ruby的其他化学式来说可能根本不起作用。考虑以下许多人会熟悉的化学式:

H2O

进行相同的替换将导致:

+2

问题是,只要有一个元素(例如氧元素),隐含的计数就为1。因此,H 2 O实际上是3个原子。

因此,现在我们可以想出一种方法来简单地解释隐含的1,对吗?当然;可以做到的。使用宏,例如以下用户定义的函数,可以最轻松,最干净地完成它:

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

为了在工作表中使用此功能,您只需引用以下化学式:

=CountAtoms(A1)

如果化学式在单元格A1中,则此函数返回所需的计数。它甚至适用于以下公式:

NaCl SbF6

请注意,这些依赖于两个字符的元素名称,其中有很多。但是,这确实要求两个字符的元素名称的第二个字符不能大写。

那么,这种方法适用于所有化学式吗?并不是的;它仅适用于到目前为止已经介绍过的简单方法。您会发现,化学式会变得非常复杂。请考虑以下示例:

2H2O

当出现这样的初始数字时,则将公式乘以该值。因此,该公式将具有6个原子,而不是H2O中的正常3个原子。

情况变得更糟。请考虑以下有效的化学式:

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

注意括号后跟数字。在此命名法中,紧跟在圆括号后面的值表示圆括号内的分子中有多少个在较大分子中。因此,在第二个示例中,整个分子中有3个SO4分子和18个H2O分子。这显然会影响整个分子式中的原子数。为了增加复杂性,甚至可以嵌套括号:

CH3(C3H4(NH2)2)18CH3

好玩吧

仍然可以使用更复杂的宏来解决。但是,如果您使用的是复杂的化学公式,而不是在这里重新发明轮子,您可能需要考虑使用此站点提供的宏:

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

请注意,这些宏并未实现为用户定义的函数。要使用它们,您只需选择具有公式的单元格,运行宏,然后宏会修改所选化学式右侧列中的信息。以上网站的代码中包含完整的说明。

您还需要确保在Visual Basic编辑器中启用正则表达式。您可以通过选择工具|引用,然后滚动浏览可用的引用,以找到Microsoft VBScript Regular Expressions 5.5选项。确保已选中引用左侧的复选框,然后单击“确定”。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(13707)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。