環境
Windowsの仕様
エディション:Windows 10 Pro
バージョン:20H2
経緯
アルファベットと数字と記号が混ざっている文字列があります。
初めの2文字は必ずアルファベットなので、それをleft()関数を使って、抜き取っていました。
本当は3文字目もアルファベットだったら、その文字も使いたいのですが、3文字目は数字かアルファベットかどっちかだったので、泣く泣くleft()関数を使っていました。
なので、今回は3文字目がアルファベットの場合と数字の場合を判別する処理を勉強してみました。
Mid()関数とIsNumeric()関数を使う
Mid()関数で3番目の文字を得て、それをIsNumeric()関数で数字かアルファベットか、判別することにしました。
まずはコードを書きますね。
Sub 文字列の3文字目を得て、判別する Dim mozi As String Dim moziChoose As String mozi = "AA123" moziChoose = Mid(mozi,3,1) If IsNumeric(moziChoose) then mozi = Left(mozi,2) Range("A1") = mozi else mozi = Left(mozi,3) Range("A1") = mozi End If End Sub
コードの説明です。空白の行はカウントしてません。
1行目、subの名前です。名前はなんでもいいです。
2行目、変数の宣言です。moziという変数を用意しました。この変数に文字列を代入します。
3行目、ここも変数の宣言です。moziChooseという変数を用意しました。この変数にアルファベットか数字を代入します。
4行目、moziという変数に文字を代入しました。ここでは”AA123″という文字です。
5行目、moziChooseという変数に、Mid()関数を使って、moziという変数に入っている文字(AA123)の文字の3番目を得ます。ここでは「1」です。
1文字だけほしいので()内の最後の数字は「1」という数字にしています。もし、ここを「2」とすると、”12″という数字が抜き取れます。
6行目、ここからIf文になります。ここでIsNumeric()関数を使って、アルファベットか数字かを判別しています。今回、moziChooseは「1」で、数字なので7行目と進んでいきます。もし、数字ではなかった場合は9行目の「else」に飛びます。
7行目、Left()関数を使って、”AA123″の2つだけ得ます。ここでは「AA」です。それを変数moziにさらに代入しています。
8行目、セル”A1”に変数moziを代入しています。ここでは「AA」です。これで処理はおわりなので、12行目に飛びます。
9行目、elseです。今回は「1」という数字だったので、なにも起こりませんが、
もし、アルファベットだった場合、これ以下の行が実行されます。
10行目、 Left()関数を使って、文字列の3つだけ得ます。
11行目、 セル”A1”に変数moziを代入しています。
12行目、if文おわりです。
13行目、subおわりです。
失敗談
Like演算子は使えませんでした
Like演算子では無理でした。初めにLeftで3文字読み取って、like演算子で[A-Z]とかすればいけるかなと思ったのですが、ダメでした。