前提・実現したいこと
化学物質を特定するものとしてCAS番号というものがあり、世界中で広く使われています。
その形式は 桁数不明の数字(大体2~7桁)- 2桁の数字 - 1桁の数字 となります。
例)鉄:7439-89-6、炭酸カルシウム:471-34-1 などです。
ユーザーフォームにこのCAS番号を入力を出来るテキストボックスを作成し、正しいCAS番号が入力されていないとメッセージが出るようにしたく、以下のようなコードを作成しました。
以下のコードで問題なく動きますが、コードが三段階になるので、一段階で出来る方法が有るでしょうか。
一段階目:ハイフンの数が2でなければ警告
二段階目:一つ目のハイフンの前の文字が数字でなければ警告
三段階目:一つ目のハイフンより後の文字の形式が##-#でなければ警告
###問題点
一つ目のハイフンより前の文字の桁数が不明の為、一段階で出来ません。
該当のソースコード
VBA
1Private Sub TextBox1_AfterUpdate() 2 3 Dim TopNum As String, NextNum As String 4 5 'ハイフンの数が2でなければ警告 6 If CountHyphen(Me.TextBox1) <> 2 Then 7 MsgBox "正しいCas番号を記入してください", vbCritical 8 Exit Sub 9 End If 10 11 TopNum = Left(Me.TextBox1, InStr(Me.TextBox1, "-") - 1) '一つ目のハイフンより前の文字 12 NextNum = Mid(Me.TextBox1, InStr(Me.TextBox1, "-") + 1) '一つ目のハイフンより後の文字 13 14 '一つ目のハイフンの前の文字が数値でなければ警告 15 If IsNumeric(TopNum) = False Then 16 MsgBox "正しいCas番号を記入してください", vbCritical 17 Exit Sub 18 End If 19 20 '一つ目のハイフンの後の文字の形式が##-#でなければ警告 21 If Not (NextNum Like "##-#") Then 22 MsgBox "正しいCas番号を記入してください", vbCritical 23 Exit Sub 24 End If 25 26End Sub 27 28Function CountHyphen(ByVal MyStr As String) As Long 29 30 'ハイフンの数を数える関数 31 Dim i As Long 32 For i = 1 To Len(MyStr) 33 If Mid(MyStr, i, 1) = "-" Then 34 CountHyphen = CountHyphen + 1 35 End If 36 Next i 37 38End Function 39
試したこと
ネットで検索したのですが、いい方法が検索できませんでした。
いい方法が有れば知りたく。よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/04 02:51