はじめに
今回は、文字列の3番目の文字がアルファベットか数字かを判別する方法について勉強しました。
環境は以下のとおりです。
- 使用OS: Windows 10 Pro
- バージョン: 20H2
背景
ある文字列に、アルファベット・数字・記号が混在しているケースがありました。
その文字列の最初の2文字は必ずアルファベットであるため、これまでは Left
関数を使って2文字を抜き取る処理をしていました。
しかし、3文字目もアルファベットだった場合には、それも取得したいと考えました。
ただし、3文字目は必ずしもアルファベットとは限らず、数字のこともありました。
そのため、今回は3文字目がアルファベットか数字かをVBAで判別する方法を学びました。
使用する関数
- Mid関数
文字列の指定した位置から文字を抜き出す関数です。 - 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行目:サブルーチンの名前です。任意の名前で問題ありません。
2行目:変数mozi
を宣言します。この変数に対象となる文字列を格納します。
3行目:変数moziChoose
を宣言します。この変数に3文字目を取り出して代入します。
4行目:mozi
に、サンプルとして「AA123」という文字列を代入しています。
5行目:Mid
関数を使用して、mozi
から3文字目だけを抜き出し、moziChoose
に格納します。この場合、「1」が取得されます。
6行目:If
文を使用し、moziChoose
が数値かどうかをIsNumeric
関数で判定します。
7行目:もしmoziChoose
が数字であれば、Left
関数を使って最初の2文字のみを取得し、それを再度mozi
に代入します。
8行目:セル「A1」に、結果として得られた文字列(この場合「AA」)を出力します。
9行目:もしmoziChoose
がアルファベットだった場合は、Else
以下が実行されます。
10行目:Left
関数を使って、最初の3文字を取得し、mozi
に代入します。
11行目:セル「A1」に、結果の文字列(3文字分)を出力します。
12行目:If
文の終了を示します。
13行目:サブルーチンの終了です。
失敗談:Like演算子では実現できなかった
当初、Like
演算子を用いて3文字目がアルファベットかどうかを判定しようと試みました。
具体的には、Left
関数で3文字抜き出し、[A-Z]
パターンに一致するかで判断できるのではと考えました。
しかし、Like
演算子は文字列全体を対象にパターンマッチングを行うため、個別の1文字判定には適していないことが分かりました。
このため、最終的にはMid
関数とIsNumeric
関数の組み合わせを採用することになりました。
まとめ
文字列中の特定の文字を取り出して、それが数字かアルファベットかを判定するには、Mid関数とIsNumeric関数を組み合わせる方法が有効です。
また、Like
演算子はこの用途には向かないため注意が必要です。
今回の方法を使えば、今後似たような文字列処理でも柔軟に対応できるでしょう。
地道な勉強と試行錯誤を積み重ね、着実にスキルアップしていきたいと思います。