今回は、1つのセルから特定の文字列を抽出する方法です。
下記のように、1つのセルに入れた文字列の中で特定の文字列を
別々のセルに書き出したい。。。そんな時はないでしょうか。
下記は、各職業のステータスを1つのセルに書いてしまいました。
ここから、各ステータスの値のみ抽出をし、それぞれのステータスの欄に
格納したいと思います。
以下がサンプルコードになります。
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つのセルから特定の文字列を抽出する方法でした。