Rubyは、いくつかの化学構造の分子式の原子数を決定する簡単な方法を見つけようとしています。たとえば、セルにC12H10N6F2などの数式が含まれている場合があります。この場合、原子の数は12 + 10 + 6 + 2 = 30です。Rubyにはこれらの数式が約300あり、これを行うために使用できるExcelの数式があるかどうか疑問に思っていました。

まず、悪いニュースです。これを行う簡単な方法はありません。

そこ;それが邪魔にならないので、私たちは解決策を探し始めることができます。 Rubyが提供する化学式の例では、原子を数えることは、アルファベット文字を他の文字に置き換えて、数字だけを評価できるようにする簡単なプロセスであると考える人もいるかもしれません。例として、Rubyの化学式の例を次に示します。

C12H10N6F2

アルファベット文字をプラス記号に置き換えると、次のようになります。

+12+10+6+2

今は簡単な式のように見えますよね?この場合は機能しますが、Rubyの他の化学式ではまったく機能しない可能性があるため、これは欺瞞的です。多くの人が精通している次の化学式を検討してください。

H2O

同じ置換を行うと、次のようになります。

+2

問題は、酸素元素などの単一の元素がある場合は常に1の暗黙のカウントがあることです。したがって、H2Oは実際には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

これらは2文字の要素名に依存していることに注意してください。その多くがあります。ただし、2文字の要素名の2番目の文字は大文字にしないでください。

それで、このアプローチはすべての化学式で機能しますか?あんまり;これまでに説明した単純なものでのみ機能します。ご覧のとおり、化学式は非常に複雑になる可能性があります。次の例を考えてみましょう:

2H2O

最初の数値がこのように表示されたら、数式にその値を掛けます。したがって、H2Oの通常の3原子の代わりに、この式には6原子が含まれます。

悪くなる。次の有効な化学式を検討してください。

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

括弧の後に数字が続くことに注意してください。この命名法では、閉じ括弧の直後の値は、括弧内の分子の数が大きい方の分子に含まれていることを示しています。したがって、2番目の例では、分子全体に3分子のSO4と18分子のH2Oがあります。これは明らかに、式全体の原子数に影響します。複雑さを増すために、括弧をネストすることもできます:

CH3(C3H4(NH2)2)18CH3

楽しいですよね?

これは、より複雑なマクロで対処できます。ただし、ここで車輪の再発明を行うのではなく、このような複雑な化学式を使用している場合は、次のサイトで提供されているマクロの使用を検討することをお勧めします。

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

マクロはユーザー定義関数として実装されていないことに注意してください。それらを使用するには、数式を含むセルを選択し、マクロを実行するだけです。次に、マクロは、選択した化学式の右側の列の情報を変更します。完全な手順は、上記のWebサイトのコードに含まれています。

また、Visual BasicEditorで正規表現を有効にしていることを確認する必要があります。これを行うには、[ツール]、[ツール]の順に選択します。参照し、利用可能な参照をスクロールして、MicrosoftVBScript正規表現5.5オプションを見つけます。参照の左側にあるチェックボックスが選択されていることを確認してから、[OK]をクリックします。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(13707)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。