インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

VBA 分子量などを計算してみる

できる範囲で自動化できることは自動化するために,こまごまとしたパーツ作りです。

分子量や式量を求めさせるのを作ってみました。原子量は最低限しかまだ書いていないので,本当に使うときはConstの中身をきちんとしないとですが,

できるかできないか確認しているところです。

コード

Const 原子量 = "H,1,C,12,N,14,O,16,Na,23,Al,27,P,31,Cl,35.5,Ca,40"

Function 式量(化学式 As String) As Single

    Dim arr原子量 As Variant
    arr原子量 = Split(原子量, ",")
    
    Dim Reg As New RegExp, Matches As MatchCollection
    With Reg
        .Global = True
        .Pattern = "([A-Z][a-z]?)([0-9]*)"
        Set Matches = .Execute(化学式)
    End With
    
    Dim i, j, 原子量_ As Single, 原子 As String, tmp As String, 添え字 As Long
    For i = 0 To Matches.Count - 1
        
        原子 = Matches(i).SubMatches(0)
        For j = 0 To UBound(arr原子量) - 2 Step 2
            If 原子 = arr原子量(j) Then 原子量_ = CSng(arr原子量(j + 1))
        Next
        
        tmp = Matches(i).SubMatches(1)
        If tmp = "" Then 添え字 = 1 Else 添え字 = CLng(tmp)
        式量 = 式量 + 原子量_ * 添え字
    Next

End Function

Sub test()
    Debug.Print "C3H8" & " " & 式量("C3H8")
    Debug.Print "CH3COOH" & " " & 式量("CH3COOH")
End Sub

Regexpの参照設定が必要です。

testを実行すると,

C3H8 44
CH3COOH 60

と返してきます。

動いてそうです。正規表現便利。

vbaであればアプリはなんであれ動くと思うので,Powerpoint用とは言えないかなぁ ( ´ー`)フゥー...