3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

今回は、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つのセルから特定の文字列を抽出する方法でした。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?