【VBA】1つのセルから特定の文字列を抽出する方法


今回は、1つのセルから特定の文字列を抽出する方法です。

下記のように、1つのセルに入れた文字列の中で特定の文字列を
別々のセルに書き出したい。。。そんな時はないでしょうか。

下記は、各職業のステータスを1つのセルに書いてしまいました。
ここから、各ステータスの値のみ抽出をし、それぞれのステータスの欄に
格納したいと思います。

以下がサンプルコードになります。

vb.ステータスを分割する
Sub ステータスを分割する()

Dim txt As String

Dim i As Long

For i = 3 To 6

    With Sheets("Sheet1")

    txt = .Cells(i, 3).Value
    txt = Replace(txt, " ", "")

    .Cells(i + 9, 3) = Mid(txt, InStr(txt, "【HP】") + 4, InStr(txt, "【MP】") - InStr(txt, "【HP】") - 4)
    .Cells(i + 9, 4) = Mid(txt, InStr(txt, "【MP】") + 4, InStr(txt, "【攻撃力】") - InStr(txt, "【MP】") - 4)
    .Cells(i + 9, 5) = Mid(txt, InStr(txt, "【攻撃力】") + 5, InStr(txt, "【防御力】") - InStr(txt, "【攻撃力】") - 5)
    .Cells(i + 9, 6) = Mid(txt, InStr(txt, "【防御力】") + 5, InStr(txt, "【素早さ】") - InStr(txt, "【防御力】") - 5)
    .Cells(i + 9, 7) = Mid(txt, InStr(txt, "【素早さ】") + 5, InStr(txt, "【賢さ】") - InStr(txt, "【素早さ】") - 5)
    .Cells(i + 9, 8) = Mid(txt, InStr(txt, "【賢さ】") + 4)

    End With

Next i

End Sub

では、詳細を説明していきます。

Dim txt As String

Dim i As Long

まずは変数を用意します。「txt」は抽出対象の文字列を格納するもので、
「i」は各行数を格納するものになります。

With Sheets("Sheet1")

    txt = .Cells(i, 3).Value
    txt = Replace(txt, " ", "")

    .Cells(i + 9, 3) = Mid(txt, InStr(txt, "【HP】") + 4, InStr(txt, "【MP】") - InStr(txt, "【HP】") - 4)
    .Cells(i + 9, 4) = Mid(txt, InStr(txt, "【MP】") + 4, InStr(txt, "【攻撃力】") - InStr(txt, "【MP】") - 4)
    .Cells(i + 9, 5) = Mid(txt, InStr(txt, "【攻撃力】") + 5, InStr(txt, "【防御力】") - InStr(txt, "【攻撃力】") - 5)
    .Cells(i + 9, 6) = Mid(txt, InStr(txt, "【防御力】") + 5, InStr(txt, "【素早さ】") - InStr(txt, "【防御力】") - 5)
    .Cells(i + 9, 7) = Mid(txt, InStr(txt, "【素早さ】") + 5, InStr(txt, "【賢さ】") - InStr(txt, "【素早さ】") - 5)
    .Cells(i + 9, 8) = Mid(txt, InStr(txt, "【賢さ】") + 4)

End With

上記を、各行ごとに処理をしていきます。

Withを使うことで、Withの中では指定したシートを省略することができます。
今回は、Sheets("Sheet1")を指定してますので、「.(ドット)」から始まる部分でSheets("Sheet1")を省略しています。

txt = Replace(txt, " ", "")

こちらは、対象のセルにスペースが入っていた場合に削除しています。
今回は不要でしたが、備忘録として記載しています。

.Cells(i + 9, 3) = Mid(txt, InStr(txt, "【HP】") + 4, InStr(txt, "【MP】") - InStr(txt, "【HP】") - 4)

こちらで、Mid関数とInStr関数を使用することで、抽出したい文字列を指定し、
値をセルに格納しています。
Mid関数とInStr関数については、下記の記事を参考にしてください。

Mid関数
https://www.tipsfound.com/vba/05mid

InStr関数
https://www.tipsfound.com/vba/05instr

For i = 3 To 6

そして、For文で抽出対象の行数分ループ処理をして完了です。

以上、1つのセルから特定の文字列を抽出する方法でした。