- キーワード以前の文字列を返す
- キーワード以後の文字列を返す
- キーワード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 SubInStr()の使い方
公務員的な事務では、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文字)








コメントを残す