[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『化学式の数値を一括で下付きにしたいです。』(たなか)
お世話になります。
投稿[[20050124160525]] を拝見しました。
化学式の数値を一括で下付にする場合、
「アルファベット・数値・『)』の後ろの数値は下付」 という動きを、
マクロで行うことは可能でしょうか。
C16H8N2Na2O8S2・・・16、8、2、2、8、2が下付
Mg(NO3)2・6H2O・・・3、2、2が下付で、6はそのまま
また、アルファベットだけれども、「pH」の後ろの数値はそのまま、
ということが実現できると、なお良いのですが…
pH4.01・・・4.01はそのまま
よろしくお願いいたします。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
処理速度は度外視の力技です。
Sub 化学式作成() Dim MyRange As Range Dim strSearch As String Dim i As Integer, intPos As Integer, intLen As Integer Dim s2 As String, s3 As String Dim PHflg As Boolean
For Each MyRange In Selection For i = 2 To Len(MyRange.Text) s2 = Mid(MyRange.Text, i - 1, 2) If i >= 3 Then s3 = Mid(MyRange.Text, i - 2, 2) If s2 Like "[A-z]?" Then PHflg = False If s3 = "pH" Then PHflg = True
If (s2 Like "[A-z][0-9]" Or s2 Like "[0-9][0-9]" Or s2 Like ")[0-9]") And Not PHflg Then MyRange.Characters(Start:=i, Length:=1).Font.Subscript = True End If Next i Next End Sub (名無し) 2018/10/24(水) 11:26
提示されたデータがA列にある場合
Sub test() Dim r As Range, m As Object With CreateObject("VBScript.RegExp") .Global = True .Pattern = "([A-Za-z]+|\))\d+" For Each r In Range("a1", Range("a" & Rows.Count).End(xlUp)) For Each m In .Execute(r.Value) If m.submatches(0) <> "pH" Then r.Characters(m.firstindex + Len(m.submatches(0)) + 1, _ m.Length - Len(m.submatches(0))).Font.Subscript = True End If Next Next End With End Sub (seiya) 2018/10/24(水) 11:27
このご回答は化学業界にとって大変貴重なものであるかと…!
早速使わせていただきます!!
(たなか) 2018/10/24(水) 11:55
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.