【VBA】文字列の3番目の文字を判別する方法

目次

はじめに

今回は、文字列の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演算子はこの用途には向かないため注意が必要です。

今回の方法を使えば、今後似たような文字列処理でも柔軟に対応できるでしょう。
地道な勉強と試行錯誤を積み重ね、着実にスキルアップしていきたいと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次