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用とは言えないかなぁ ( ´ー`)フゥー...