文字列の一部を返す
Microsoft Office 2000/Visual Basic プログラマーズ ガイド | ![]() |
文字列の一部で作業するには、文字列を解析する必要があります。InStr 関数または InStrRev 関数を使用して、文字列の解析を開始する位置を検索します。位置が検索されたら、Left 関数、Right 関数、および Mid 関数を使用して作業を実行します。Left 関数と Right 関数は、文字列の左側または右側から開始して検索された特定の数の文字を返します。Mid 関数は最も柔軟性を持つ解析関数であり、文字列の任意の位置を開始位置として指定できます。この場合、返す文字数を開始位置に挿入します。
メモ VBA の文字列関数の中には 2 種類のバリエーションを持つものがあります。1 つは文字列を返し、もう 1 つは文字列型 (String) のバリアント値を返します。文字列を返す関数名にはドル記号 ($) が含まれます。たとえば、Chr$、Format$、LCase$、Left$、LTrim$、Mid$、Right$、RTrim$、Space$、Trim$、UCase$ などがあります。文字列型のバリアント値を返す関数にはドル記号は含まれません。これらの関数名は、Chr、Format、Lcase、Left、Ltrim、Mid、Right、Rtrim、Space、Trim、Ucase などになります。前者の関数はすばやく結果を返しますが、Null 値を使用して呼び出すとエラーが発生します。文字列型のバリアント値を返す関数では、Null 値を問題なく使用できます。この章でのサンプル コードでは、文字列を返す関数を適宜使用しています。
次のプロシージャは、ファイル パスを解析して、パス (ファイル名以外のすべて)、ファイル名、ドライブ名、または拡張子のいずれかを返します。パス部分とファイル名のいずれかを指定するには、定数を lngPart 引数に渡します。lngPart 引数は、Office 2000 Developer CD-ROM の ODETools\V9\Samples\ODETools\V9\Samples\OPG\Samples\CH07 サブフォルダに含まれる VBA.mdb の modPublicDefs モジュールで宣言されている、ユーザー定義の列挙定数を含む opgParsePath として定義されます。
このプロシージャは、InStrRev 関数を使用して、文字列内で最後のパスの区切り、または円記号 (\) を検索します。InStr 関数を使用した場合、文字列の最後まで検索されたことを確認するためにループを記述する必要があります。InStrRev 関数では、最初に検索された円記号が実際に文字列内の最後の円記号であることが確実であるため、その右側にある文字列がファイル名であることがわかります。
Function ParsePath(strPath As String, _
lngPart As opgParsePath) As String
' このプロシージャはファイル パスを取得し、
' 渡された定数に応じてパス (ファイル名以外のすべて)、
' ドライブ名、または拡張子を返します。
Dim lngPos As Long
Dim strPart As String
Dim blnIncludesFile As Boolean
' これがファイルのパスであることを確認します。
' 最後のパスの区切りを検索します。
lngPos = InStrRev(strPath, "\")
' 最後の円記号以降の文字列にドットが
' 含まれるかどうかを確認します。
blnIncludesFile = InStrRev(strPath, ".") > lngPos
If lngPos > 0 Then
Select Case lngPart
' ファイル名を返します。
Case opgParsePath.FILE_ONLY
If blnIncludesFile Then
strPart = Right$(strPath, Len(strPath) - lngPos)
Else
strPart = ""
End If
' パスを返します。
Case opgParsePath.PATH_ONLY
If blnIncludesFile Then
strPart = Left$(strPath, lngPos)
Else
strPart = strPath
End If
' ドライブ名を返します。
Case opgParsePath.DRIVE_ONLY
strPart = Left$(strPath, 3)
' ファイルの拡張子を返します。
Case opgParsePath.FILEEXT_ONLY
If blnIncludesFile Then
' ドットの後の 3 文字を取得します。
strPart = Mid(strPath, InStrRev(strPath, ".") + 1, 3)
Else
strPart = ""
End If
Case Else
strPart = ""
End Select
End If
ParsePath = strPart
ParsePath_End:
Exit Function
End Function
このプロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\ODETools\V9\Samples\OPG\Samples\CH07 サブフォルダに含まれる VBA.mdb の modStrings モジュールにあります。
[イミディエイト] ウィンドウからこの関数を次のように呼び出すと、"Test.txt" が表示されます。
? ParsePath("C:\Temp\Test.txt", opgParsePath.FILE_ONLY)