【VBA】文字列を切り取るコード。文字列内のキーワード以前、以後の文字列を返す。

  • キーワード以前の文字列を返す
  • キーワード以後の文字列を返す
  • キーワードAとBの間の文字列を返す

この3種類のコードを紹介します。

テストコード(実行コード)は3つまとめて最後にあります。

キーワード以前の文字列を返す

「令和5年度地方債償還額」の「令和5年度」以降の文字列が欲しいときはこんな感じのコードになります。

' 文字列inputStringで、delimiterA以前の文字列を返す
Function GetStringBefore(inputString As String, delimiterA As String) As String
    Dim positionOfA As Integer
    
    ' delimiterAの位置を見つける
    positionOfA = InStr(inputString, delimiterA)
    If positionOfA = 0 Then
        GetStringBefore = ""
        Exit Function
    End If
    
    ' delimiterA以前の文字列を抽出
    GetStringBefore = Mid(inputString, 1, positionOfA - 1)
    
End Function

キーワード以後の文字列を返す

次は「令和5年度地方債償還額」の「償還額」以前の文字列が欲しいときです。

' 文字列inputStringで、delimiterA以降の文字列を返す
Function GetStringAfter(inputString As String, delimiterA As String) As String
    Dim positionOfA As Integer
    
    ' delimiterAの位置を見つける
    positionOfA = InStr(inputString, delimiterA)
    If positionOfA = 0 Then
        GetStringAfter = ""
        Exit Function
    End If
    
    ' delimiterA以降の文字列を抽出
    GetStringAfter = Mid(inputString, positionOfA + Len(delimiterA))
End Function

キーワードAとBの間の文字列を返す

「令和5年度地方債償還額」の「令和5年度」と「償還額」の間の文字列が欲しいときです。

' 文字列inputStringで、delimiterAとdelimiterBの間の文字列を返す
Function GetStringBetween(inputString As String, delimiterA As String, delimiterB As String) As String
    Dim startPositionOfA As Long
    Dim endPositionOfB As Long
    Dim substringLength As Long
    
    ' delimiterAの位置を見つける
    startPositionOfA = InStr(inputString, delimiterA)
    If startPositionOfA = 0 Then
        GetStringBetween = ""
        Exit Function
    End If
    
    ' delimiterBの位置を見つける。delimiterAの位置の後ろから検索を始める
    endPositionOfB = InStr(startPositionOfA + Len(delimiterA), inputString, delimiterB)
    If endPositionOfB = 0 Then
        GetStringBetween = ""
        Exit Function
    End If
    
    ' delimiterAとdelimiterBの間の文字列の長さを計算
    substringLength = endPositionOfB - (startPositionOfA + Len(delimiterA))
    
    ' delimiterAとdelimiterBの間の文字列を抽出
    GetStringBetween = Mid(inputString, startPositionOfA + Len(delimiterA), substringLength)
End Function

テストコード

Sub Test()
    Dim testString As String
    Dim result As String

    ' Test GetStringBefore
    testString = "abcxyz123"
    result = GetStringBefore(testString, "y")
    Debug.Print result

    ' Test GetStringAfter
    result = GetStringAfter(testString, "y")
    Debug.Print result
    
    ' Test GetStringBetween
    result = GetStringBetween(testString, "a", "3")
    Debug.Print result
End Sub

InStr()の使い方

公務員的な事務では、InStrは特定の文字列を含むかどうかという判別で使うことが多いです。

If InStr("Hello World", "World") <> 0 Then

その場合はこのような0以外、または0より大きいといった条件式と組み合わされます。

選んだセルに特定の文字列が含まれるかどうかといった判定ですね。

Dim position As Integer
position = InStr("Hello World", "World")

今回の場合、Worldが何文字目にくるかということを確認する、といった意味で使っています。

この場合はpositon=7になります。

(Helloで5、スペースで6、Wが7文字目です)

Mid()の使い方

文字列を切り取る系の関数ですが、覚える必要なないと思います。

第一引数は対象となる文字列

第二引数は切り取りの開始位置

第三引数は切り取る文字数(省略した場合は開始位置からすべて切り取る)

例を見ると簡単です。

Mid("あいうえお", 1, 1)

' あ(1番目の文字から1文字)

Mid("あいうえお", 2, 1)

'い(2番目の文字から1文字)

Mid("あいうえお", 2, 2)

'いう(2番目の文字から2文字)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA