VBA 文字列と文字列関数
In this Article
VBAには多くの文字列関数があり、コードの中でテキストや文字列を操作したり作業したりすることができます。このチュートリアルでは、文字列から一部を抽出する関数、文字列からスペースを取り除く関数、テキストや文字列の大文字と小文字の変換、文字列の比較、その他の便利な文字列関数について説明します。
文字列の一部を抽出
VBA Left 関数
VBAのLeft 関数を使うと、テキストや文字列の左側からその一部を抽出することができます。VBAのLeft 文字列関数の構文は以下のとおりです。
Left(文字列, 文字数)
- 文字列 – 元となる文字列。
- 文字数 – 元となる文字列の先頭から何文字抽出するかを指定する整数値。
次のコードは、Left 関数を使って、与えられた文字列の最初の4文字を抽出する方法です。
Sub UsingTheLeftStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = "AutomateExcel"
valueTwo = Left(valueOne, 4)
MsgBox valueTwo
End Sub
結果は次のようになります。
Left 関数は、AutomateExcelの最初の4文字であるAutoを抽出しました。
VBA Right 関数
VBAのRight 関数を使うと、テキストや文字列の右側からその一部を抽出することができます。VBAのRight 関数の構文は次のとおりです。
Right(文字列, 文字数)
- 文字列 – 元となる文字列。
- 文字数 – 元となる文字列の末尾から何文字抽出するかを指定する整数値。
次のコードは、Right 関数を使って、文字列の最後の4文字を抽出する方法です。
Sub UsingTheRightStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = "AutomateExcel"
valueTwo = Right(valueOne, 4)
MsgBox valueTwo
End Sub
結果は次のようになります。
Right 関数はAutomateExcelの最後の4文字であるxcelを抽出しました。
VBA Mid関数
VBAのMid関数を使うと、テキストや文字列の指定した位置から、任意の長さの文字列を抽出することができます。VBAのMid 関数の構文は次のとおりです。
Mid(文字列, 開始位置, [文字数])
- 文字列 – 元となる文字列。
- 開始位置 – この関数が抽出を開始する、元となる文字列内の位置。
- 文字数 (オプション) – 元となる文字列の開始位置から何文字抽出するかを指定する整数。省略した場合、Mid関数は開始位置から末尾までの文字を返します。
次のコードは、Mid 関数を使って、文字列の2番目の位置から4文字を抽出する方法を示しています。
Sub UsingTheMidStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = "AutomateExcel"
valueTwo = Mid(valueOne, 2, 4)
MsgBox valueTwo
End Sub
結果は以下のようになります。
Mid 関数は、AutomateExcelの2文字目からの4文字をutomとして抽出しました。
文字列が含まれる位置を見つける
VBA Instr関数
VBAのInstr関数は、対象となる文字列に含まれる特定の文字列の開始位置を返します。この関数では、通常、大文字と小文字が区別されます。VBA Instr 関数の構文は次のとおりです。
Instr([開始位置], 文字列, 検索文字列, [比較モード])
- 開始位置 (オプション) – 検索する開始位置を指定します。省略された場合、デフォルトの値である1が使用されます。
- 文字列 – 検索文字列が含まれる文字列。
- 検索文字列 – 位置を特定したい文字列。
- 比較モード (オプション) – 比較の種類を指定します。省略された場合、バイナリ比較が使用されます。
– vbBinaryCompare – バイナリ比較(大文字と小文字を異なるものとして扱います)
– vbTextCompare – テキスト比較(大文字と小文字を同じものとして扱います)
– vbDatabaseCompare – データベース比較(このオプションはMicrosoft Accessでのみ使用され、データベースに基づく比較となります)
次のコードは、Instr 関数を使って、検索の対象となる文字列の中で検索文字列 “Th” が最初に現れる現れる位置を示します。
Sub UsingTheInstrStringFunction()
Dim valueOne As String
Dim positionofSubstring As Integer
valueOne = "This is The Text "
positionofSubstring = InStr(1, valueOne, "Th")
Debug.Print positionofSubstring
End Sub
結果(イミディエイトウィンドウに出力される)は次のようになります。
Instr関数は、「Th 」という文字列が最初に現れる位置を1として返しました。 この関数は、スペースを含めてカウントすることに注意してください。
VBA InstrRev 関数
VBA InstrRev関数は、対象となる文字列に含まれる特定の文字列の開始位置を返しますが、文字列の末尾からその位置をカウントしはじめます。この関数では通常、大文字と小文字が区別されます。
VBA InstrRev 関数の構文は次のとおりです。
InstrRev(文字列, 検索文字列, [開始位置], [比較モード])
- 文字列 – 検索文字列が含まれる文字列。
- 検索文字列 – 位置を特定したい文字列。
- 開始位置 (オプション) – 検索する開始位置を指定します。省略された場合、末尾から検索が開始されます。
- 比較モード (オプション) – これは、比較の種類を指定します。省略された場合、バイナリ比較が使用されます。
– vbBinaryCompare – バイナリ比較(大文字と小文字は異なるものとして扱います)
– vbTextCompare – テキスト比較(大文字と小文字を同じものとして扱います)
– vbDatabaseCompare – データベース比較(このオプションはMicrosoft Accessでのみ使用され、データベースに基づく比較となります。)
次のコードは、Instr 関数を使って、検索の対象となる文字列の中で検索文字列 「Th」が末尾から見て最初に現れる現れる位置を示します。
Sub UsingTheInstrRevStringFunction()
Dim valueOne As String
Dim positionofSubstring As Integer
valueOne = "This is The Text "
positionofSubstring = InStrRev(valueOne, "Th")
Debug.Print positionofSubstring
End Sub
イミディエイトウィンドウに結果が出力されます。
InstrRev関数は、「Th 」という検索文字列が最初に現れる位置を返しますが、末尾からカウントして9を返しました。 この関数では、カウントにスペースが含まれることに注意してください。
文字列からスペースを取り除く
VBAのLTrim関数
VBA LTrim関数は、テキストまたは文字列からすべての先頭のスペースを削除します。VBA LTrim 関数の構文は次のとおりです。
LTrim(文字列)
- 文字列 – 元となる文字列。
次のコードは、VBAのLTrim関数を使って、与えられた文字列の先頭のスペースを削除する方法を示しています。
Sub UsingTheLTrimStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = " This is the website adddress " _
& "https://www.automateexcel.com/excel/"
valueTwo = LTrim(valueOne)
MsgBox valueOne
MsgBox valueTwo
End Sub
結果は以下のとおりです。
LTrim関数によってvalueTwoの先頭のスペースが削除され、2番目のメッセージボックスに表示されています。
VBAのRTrim関数
VBAのRTrim関数は、テキストまたは文字列からすべての末尾のスペースを削除します。VBA RTrim 関数の構文は次のとおりです。
RTrim(文字列)
- 文字列 – 元となる文字列。
次のコードは、VBAのRTrim関数を使って、与えられた文字列の末尾のスペースを削除する方法を示しています。
Sub UsingTheRTrimStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = "This is the website adddress " _
& "https://www.automateexcel.com/excel/ "
valueTwo = RTrim(valueOne)
MsgBox valueOne
MsgBox valueTwo
End Sub
結果は次のようになります。
RTrim関数によってvalueTwoの末尾のスペースが削除され、2番目のメッセージボックスに表示されています。
VBAのTrim関数
VBAのTrim関数は、テキストまたは文字列から、先頭および末尾のスペースを削除します。VBA Trim 関数の構文は次のとおりです。
Trim(文字列)
- 文字列 – 元となる文字列。
次のコードは、VBAのTrim関数を使って、与えられた文字列の先頭と末尾のスペースを削除する方法を示しています。
Sub UsingTheTrimStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = " This is the website adddress " _
& "https://www.automateexcel.com/excel/ "
valueTwo = Trim(valueOne)
MsgBox valueOne
MsgBox valueTwo
End Sub
結果は以下のとおりです。
Trim 関数によって、valueTwo の先頭と末尾のスペースが削除され、2 番目のメッセージボックスに表示されています。
VBAの大文字小文字変換関数
VBA LCase関数
VBA LCase関数は、テキストや文字列の文字を小文字に変換する関数です。VBA LCase 関数の構文は次のとおりです。
LCase(文字列)
- 文字列 – 元となる文字列。
次のコードは、LCase 関数を使って、与えられた文字列のすべての文字を小文字に変換する方法を示しています。
Sub UsingTheLCaseStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = "THIS IS THE PRODUCT"
valueTwo = LCase(valueOne)
MsgBox valueTwo
End Sub
結果は以下のようになります。
LCase関数によって、文字列中のすべての文字が小文字に変換されました。
VBA UCase 関数
VBA UCase関数は、テキストまたは文字列内の文字を大文字に変換します。VBA UCase 関数の構文は次のとおりです。
UCase(文字列)
- 文字列 – 元となる文字列。
次のコードは、UCase 関数を使って、与えられた文字列のすべての文字を大文字に変換する方法を示しています。
Sub UsingTheUCaseStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = "this is the product"
valueTwo = UCase(valueOne)
MsgBox valueTwo
End Sub
結果はこのようになります。
UCase関数によって、文字列内のすべての文字が大文字に変換されました。
VBA StrConv関数
VBAのStrConv関数は、テキストまたは文字列内の文字を、指定した変換タイプに応じて大文字、小文字、固有名詞、ユニコードに変換できます。 VBA StrConv 関数の構文は次のとおりです。
StrConv(文字列, 文字種, [LCID])
- 文字列 – 元となる文字列。
- 文字種 – 希望する変換の種類。
- LCID (オプション) – LocaleIDを指定するオプションのパラメータです。省略された場合、システムのLocaleIDが使用されます。
次のコードは、StrConv 関数を使って文字列を適切な大文字と小文字に変換する方法を示しています。
Sub UsingTheStrConvStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = "this is THE product"
valueTwo = StrConv(valueOne, vbProperCase)
MsgBox valueTwo
End Sub
結果は次のようになります。
変換の種類は、文字種パラメータで指定します。
- vbLowerCaseは、すべての文字を小文字に変換します。
- vbUpperCaseは、すべての文字を大文字に変換します。
- vbProperCaseは、各単語の最初の文字を大文字に変換し、他の文字はすべて小文字にします。
- vbWideは、半角文字を全角文字に変換します。
- vbNarrowは、全角文字を半角文字に変換します。
- vbKatakanaは、ひらがなをカタカナに変換します。
- vbHiraganaは、カタカナをひらがなに変換します。
- vbUnicode は、文字列をユニコードに変換します。
- vbFromUnicodeは、文字列をunicodeからシステムのデフォルトコードページ(Shift_JIS)に変換します。
文字列の比較
VBA StrComp関数
VBAのStrComp関数を使うと、2つの文字列を比較することができます。この関数は、以下の値を返します。
- 2つの文字列が一致する場合は 0
- 文字列1が文字列2より小さい場合は -1
- 文字列1が文字列2より大きい場合は 1
- どちらかの文字列がNullの場合、Null
次のコードは、StrComp関数を使用して2つの文字列を比較する方法を示しています。
Sub UsingTheStrCompStringFunction()
Dim valueOne As String
Dim valueTwo As String
Dim resultofComparison As Integer
valueOne = "AutomateExcel"
valueTwo = "AutomateExcel"
resultofComparison = StrComp(valueOne, valueTwo)
Debug.Print resultofComparison
End Sub
結果は次のようになります。
StrComp関数は、2つの文字列が完全に一致するため0を返しました。
VBA Like演算子
VBAのLike演算子を使うと、テキストや文字列をあるパターンと比較して、一致するかどうかを確認することができます。通常、Like演算子はワイルドカードと組み合わせて使用します。次のコードは、Like演算子の使用方法を示しています。
Sub UsingTheLikeOperatorInVBA()
Dim valueOne As String
valueOne = "Let's view the output"
If valueOne Like "*view*" Then
MsgBox "There is a match, this string contains the word view"
Else
MsgBox "No match was found"
End If
End Sub
結果は以下のとおりです。
パターンマッチのためにLike演算子と一緒に使えるワイルドカードは以下の通りです。
- 「?」 一文字にマッチするもの
- 「#」 一桁の数字にマッチするもの
- 「*」0以上の文字にマッチするもの
次のコードは、Like演算子と?ワイルドカードを使用して、コード内のパターンにマッチさせる方法を示しています。
Sub UsingTheLikeOperatorWithAWildcardInVBA()
Dim valueOne As String
valueOne = "The"
If valueOne Like "??e" Then
MsgBox "There is a match, a matching pattern was found"
Else
MsgBox "No match was found"
End If
End Sub
結果は以下のとおりです。
その他の便利なVBA文字列関数
VBA Replace String関数
VBA Replace関数は、文字列内の文字セットを別の文字セットで置き換えます。VBA Replace 関数の構文は次のとおりです。
Replace(文字列, 検索文字列, 置換文字列, [開始位置], [置換回数], [比較モード])
- 文字列 – 元となる文字列。
- 検索文字列 – 元の文字列の中で検索する文字列。
- 置換文字列 – 検索した文字列を置換する文字列。
- 開始位置 (オプション) – 元の文字列内で検索を開始する位置。省略された場合は1が使用され、先頭から検索が開始されます。
- 置換回数 (オプション) – マッチした文字列を置換する回数。省略された場合、マッチしたすべての文字列を置き換えます。
- 比較モード (オプション) – 比較の種類を指定します。省略された場合、バイナリ比較が使用されます。
– vbBinaryCompare – バイナリ比較(大文字と小文字を異なるものとして扱います)
– vbTextCompare – テキスト比較(大文字と小文字を同じものとして扱います)
– vbDatabaseCompare – データベース比較(このオプションはMicrosoft Accessでのみ使用され、データベースに基づく比較です)
次のコードは、文字列置き換え関数の使用方法を示しています。
Sub UsingTheReplaceStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = "ProductABC"
valueTwo = Replace(valueOne, "ABC", "XYZ")
MsgBox valueTwo
End Sub
結果は以下のようになります。
Replace 関数はProductABC内の文字列ABCを見つけ出し、それを文字列XYZに置き換えています。
VBA StrReverse 関数
VBA StrReverse関数は、与えられたテキストまたは文字列の文字の順序を反転させます。VBA StrReverse 関数の構文は次のとおりです。
StrReverse(文字列)
- 文字列 – 元の文字列。
次のコードは、VBAのStrReverse関数を使用して、文字列Productの文字を反転させる方法を示しています。
Sub UsingTheStrReverseStringFunction()
Dim valueOne As String
Dim valueTwo As String
valueOne = "Product"
valueTwo = StrReverse(valueOne)
MsgBox valueTwo
End Sub
結果は以下のようになります。
VBA Len 関数
VBA Len 関数は、文字列の文字数を返します。VBA Len 関数の構文は次のとおりです。
Len(String)
- 文字列 – 元となる文字列。
次のコードは、Len 関数を使って文字列の長さを求める方法を示しています。 AutomateExcel:
Sub UsingTheLenFunction()
Dim valueOne As String
Dim stringLength As Integer
valueOne = "AutomateExcel"
stringLength = Len(valueOne)
Debug.Print stringLength
End Sub
結果は以下のようになります。
Len 関数は、文字列AutomateExcel のすべての文字をカウントし、13文字となりました。