こんにちは、VBAエンジニアのやすこれです。
みなさんは、VBAでLeft関数を使ったことがありますか?
- VBAで任意の文字列の内、左から指定した文字分だけ取り出したい
- Left関数の使いどころがわからない
- Left関数の利用の仕方を実例付きで知りたい!
そこで今回は、任意の文字列の内、左から指定した文字数分だけを取り出せるLeft関数の使い方と実務での応用方法をサンプルコード付きで紹介します。
VBAでのLeft関数の使い方
Left関数の基本的な使い方
Left関数は、任意の文字列の左側から文字数を指定して一部を取り出す関数です。- 基本構文
Left(文字列, 長さ)
- 「長さ」が0の場合は、「””」(空白)を返す
- 「長さ」が指定した文字列の文字数以上の場合は、文字列全てを返す
- コード例
Left("ABCDE", 3)
文字列「ABCDE」の左から長さ「3」の文字列「ABC」を返します。LeftB関数について
LeftB関数は任意の文字列の左側からバイト数を指定して一部を取り出す関数です。引数の指定方法はLeft関数と同じです。- 基本構文
LeftB(文字列, 長さ)
- 「長さ」が0の場合は、「””」(空白)を返す
- 「長さ」が指定した文字列のバイト数以上の場合は、文字列全てを返す
- コード例
LeftB("ABCDE", 6)
文字列「ABCDE」の左から長さ「6」バイトの文字列「ABC」を返します。- 2バイトで1文字
- 1文字に満たないバイト数「1」を「長さ」に指定した場合は、「””」(空白)を返す
Left関数の引数について
第二引数「長さ」を「0」にした場合
Left関数は、「長さ」が「0」の場合、「””」(空白)を返します。- コード例
Left("ABCDE", 0)
文字列「ABCDE」の左から、長さ「0」の文字列を取得するので、「””」(空白)を返します。第二引数「長さ」が文字数以上の場合
Left関数は、「文字列」の文字数より第二引数「長さ」が大きい場合、「文字列」全てを返します。- コード例
Left("ABCDE", 6)
「長さ」が文字列「ABCDE」の文字数「5」より大きいので、文字列全体の「”ABCDE”」を返します。Left関数の実務での利用方法
住所から都道府県を取得
'都道府県を取り出す元となる住所を定義
Dim trgtAddress As String
trgtAddress = "東京都〇〇区"
'都道府県は「神奈川県」「和歌山県」「鹿児島県」のみ4文字でそれ以外は3文字
Dim endNum As Long
If InStr(trgtAddress, "県") = 4 Then
endNum = 4
Else
endNum = 3
End If
'都道府県を取得
Dim trgtPrefecture As String
trgtPrefecture = Left(trgtAddress, endNum)
まず都道府県は「神奈川県」「和歌山県」「鹿児島県」以外はすべて3文字です。つまり、3つの県に該当している、4文字目が「県」(「InStr(〇〇, “県”) = 4」)の場合は左端から4文字を取得して、3つの県に該当しなければ、左端から3文字を取得すれば都道府県を取り出すことができます。
これを利用して、下記の部分で判定を行い、都道府県が対象の住所から何文字目までかを「endNum」に定義しています。
'都道府県は「神奈川県」「和歌山県」「鹿児島県」のみ4文字でそれ以外は3文字
Dim endNum As Long
If InStr(trgtAddress, "県") = 4 Then
endNum = 4
Else
endNum = 3
End If
あとは「Left関数」を使って、対象の住所「trgtAddress」から「endNum」に定義された数だけ文字数を取得すれば、住所から都道府県を取り出すことができます。'都道府県を取得
Dim trgtPrefecture As String
trgtPrefecture = Left(trgtAddress, endNum)
- InStr(文字列1, 文字列2)
- 対象「文字列1」の内、「文字列2」が始まる位置を返す
- ex)InStr(“ABC”, “B”) → 2
キーワードより左側の文字列を取得
'キーワード左側を取り出す元となる文字列を定義
Dim trgtDepartment As String
trgtDepartment = "営業部営業第一課"
'キーワードを定義
Dim keyword As String
keyword = "部"
'キーワード位置を取得
Dim endNum As Long
endNum = InStr(trgtDepartment, keyword)
'キーワードから左側を取得
Dim trgtDivision As String
trgtDivision = Left(trgtDepartment, endNum - 1)
まず、元となる文字列やキーワードを次の部分で定義します。'キーワード左側を取り出す元となる文字列を定義
Dim trgtDepartment As String
trgtDepartment = "営業部営業第一課〇〇係"
'キーワードを定義
Dim keyword As String
keyword = "部"
つづいて、次の部分で、キーワード位置を取得します。'キーワード位置を取得
Dim endNum As Long
endNum = InStr(trgtDepartment, keyword)
- InStr(文字列1, 文字列2)
- 対象「文字列1」の内、「文字列2」が始まる位置を返す
- ex)InStr(“ABC”, “B”) → 2
'キーワードから左側を取得
Dim trgtDivision As String
trgtDivision = Left(trgtDepartment, endNum - 1)
InStr関数については、下記でも詳しく解説しているので、読んでみてください。
名字と名前を分ける
'フルネームを定義
Dim fullName As String
fullName = "田中 太郎"
'名字と名前を分ける位置を取得
Dim borderNum As Long
borderNum = InStr(fullName, " ")
'名字を取得
Dim lastName As String
lastName = Left(fullName, borderNum - 1)
'名前を取得
Dim fastName As String
fastName = Mid(fullName, borderNum + 1)
まず「InStr関数」を使って、名字と名前の間にある「スペース」の位置を取得して、「borderNum」に定義しています。'名字と名前を分ける位置を取得
Dim borderNum As Long
borderNum = InStr(fullName, " ")
- InStr(文字列1, 文字列2)
- 対象「文字列1」の内、「文字列2」が始まる位置を返す
- ex)InStr(“ABC”, “B”) → 2
'名字を取得
Dim lastName As String
lastName = Left(fullName, borderNum - 1)
最後に「Mid関数」と「borderNum」を使って「スペース」の後ろから最後までの文字列(名前)を取得しています。
'名前を取得
Dim fastName As String
fastName = Mid(fullName, borderNum + 1)
- Mid(文字列, 開始位置 [, 長さ])
- 対象「文字列」の内、「開始位置」から指定した「長さ」の文字列を取得
- 「長さ」を省略した場合、「開始位置」から指定した文字列の最後まで取得
- ex)Mid(“ABCDE”, 3) → “CDE”
フルパスをディレクトリとファイル名に分ける
'フルパスを定義
Dim trgtPath As String
trgtPath = "C:\サンプル\SampleFile.xlsx"
'ディレクトリを取得
Dim dirStr As String
dirStr = Left(trgtPath, InStrRev(trgtPath, ""))
'ファイルネームを取得
Dim fileName As String
fileName = Replace(trgtPath, dirStr, "")
まず次の部分で、ディレクトリとファイル名に分けたいフルパス「trgtPath」から、ディレクトリ「dirStr」を取り出します。'フルパスを定義
Dim trgtPath As String
trgtPath = "C:\サンプル\SampleFile.xlsx"
'ディレクトリを取得
Dim dirStr As String
dirStr = Left(trgtPath, InStrRev(trgtPath, ""))
画像のように「InStrRev(trgtPath, “\”)」の部分で末尾の「\」の位置、つまりファイル名が始まる直前の位置を取得しLeft関数でそれよりも前の文字列であるディレクトリを取得しています。- InStrRev(文字列1, 文字列2)
- 対象「文字列1」の内、末尾から「文字列2」を検索し、その開始位置を返す
- ex)InStrRev(“ABCABC”, “B”) → 5
'ファイルネームを取得
Dim fileName As String
fileName = Replace(trgtPath, dirStr, "")
画像のように「Replace関数」を使って、フルパス「trgtPath」からディレクトリ名「dirStr」を「空の文字列」に置き換えることでファイル名「fileName」を取得しています。- Replace(文字列1, 文字列2, 文字列3)
- 対象「文字列1」から「文字列2」を検索し、「文字列3」に置き換える
- ex)Replace(“ABCDE”, “DE”, “”) → “ABC”
Replace関数については、下記でも詳しく解説しているので、読んでみてください。
また、ファイル名の取得は、Dir関数でも行うことができますので、あわせてご覧ください。
VBAでのLeft関数まとめ
今回はVBAでのLeft関数の使い方と実務での使用方法を紹介いたしました。VBALeft関数の実務での利用方法
第二引数「長さ」に「0」を指定すると「””」(空白)を返すこと、文字数より大きいと文字列全体を返すことについても覚えておきましょう。まずは実例通り使ってみると、理解が深まり応用が効くのでおすすめです。- 住所から都道府県を取得
- キーワードより左側の文字列を取得
- 名字と名前を分ける
- フルパスをディレクトリとファイル名に分ける
ぜひ使ってみてください。