Left / Right は「文字列の端っこを切り取るハサミ」
Left と Right は、どちらも
「文字列の端っこから、指定した文字数だけ切り出す」ための関数です。
Left は「左(先頭)から」
Right は「右(末尾)から」
という違いだけで、考え方はまったく同じです。
人間の感覚で言うと、
- Left:先頭から n 文字だけちょん切る
- Right:最後から n 文字だけちょん切る
というイメージでOKです。
Left の基本:左(先頭)から n 文字を取り出す
基本構文とシンプルな例
構文はこうです。
Left(文字列, 取り出したい文字数)
VB例:
Sub SampleLeftBasic()
Dim s As String
Dim r As String
s = "2026/02/23"
r = Left(s, 4) ' 先頭から4文字 → "2026"
MsgBox r
End Sub
VBここでは、
- s は
"2026/02/23" - Left(s, 4) は「2」「0」「2」「6」の4文字 →
"2026"
という動きです。
「年だけ取りたい」「商品コードの先頭の区分だけ取りたい」
みたいな“先頭側の固定桁”を抜き出すときに、Left はよく使います。
文字数を変えて感覚を掴む
同じ文字列で、取り出す文字数を変えてみるとイメージが固まります。
Sub SampleLeftVarious()
Dim s As String
s = "ABCDEF"
MsgBox Left(s, 1) ' "A"
MsgBox Left(s, 3) ' "ABC"
MsgBox Left(s, 6) ' "ABCDEF"
End Sub
VB「先頭から何文字か」を指定するだけ、というシンプルさです。
Right の基本:右(末尾)から n 文字を取り出す
基本構文とシンプルな例
構文はこうです。
Right(文字列, 取り出したい文字数)
VB例:
Sub SampleRightBasic()
Dim s As String
Dim r As String
s = "2026/02/23"
r = Right(s, 2) ' 末尾から2文字 → "23"
MsgBox r
End Sub
VBここでは、
- s は
"2026/02/23" - Right(s, 2) は「2」「3」の2文字 →
"23"
という動きです。
「日だけ取りたい」「末尾の連番だけ取りたい」
みたいな“末尾側の固定桁”を抜き出すときに、Right が活躍します。
こちらも文字数を変えてみる
Sub SampleRightVarious()
Dim s As String
s = "ABCDEF"
MsgBox Right(s, 1) ' "F"
MsgBox Right(s, 3) ' "DEF"
MsgBox Right(s, 6) ' "ABCDEF"
End Sub
VBLeft と対称的に、「最後から何文字か」を指定するだけです。
Left / Right が光る「商品コード」「日付文字列」の例
商品コードの「区分」と「連番」を分ける
例えば、こんな商品コードがあるとします。
"A-00123""B-00456"
ここから、
- 先頭の「区分」(A, B)
- 末尾の「3桁の連番」(123, 456)
を取り出したい、というケースです。
Sub SampleCodeSplit()
Dim code As String
Dim kubun As String
Dim renban As String
code = "A-00123"
kubun = Left(code, 1) ' 先頭1文字 → "A"
renban = Right(code, 3) ' 末尾3文字 → "123"
MsgBox "区分: " & kubun & vbCrLf & "連番: " & renban
End Sub
VBここでのポイントは、
- 「区分」は常に1文字 → Left(code, 1)
- 「連番」は常に3桁 → Right(code, 3)
という“固定桁”を素直に切っているだけ、ということです。
日付文字列から「年」「月」「日」を取り出す
"2026/02/23" のような文字列から、
年・月・日をそれぞれ取り出す例です(あくまで文字列として扱うパターン)。
Sub SampleDateSplit()
Dim s As String
Dim yyyy As String
Dim mm As String
Dim dd As String
s = "2026/02/23"
yyyy = Left(s, 4) ' "2026"
mm = Mid(s, 6, 2) ' "02"
dd = Right(s, 2) ' "23"
MsgBox yyyy & "年" & mm & "月" & dd & "日"
End Sub
VBここでは Mid も混ざっていますが、
Left / Right が「端っこ担当」、Mid が「真ん中担当」という役割分担になっています。
Len と組み合わせると「柔軟な切り方」ができる
「最後の1文字を除いた部分」を取りたい
文字列の長さが毎回違う場合、
「右から3文字」ではなく「最後の1文字を除いた残り全部」のような指定をしたくなることがあります。
そのときに使えるのが Len との組み合わせです。
Sub SampleLeftWithLen()
Dim s As String
Dim body As String
s = "ABCDEF"
body = Left(s, Len(s) - 1)
MsgBox body ' → "ABCDE"
End Sub
VBここでの考え方は、
- 全体の長さ:Len(s)
- 最後の1文字を除く → 「全体の長さ – 1」文字ぶんを Left で取る
というものです。
「右から3文字目以降を全部」取りたい
今度は Right と Len を組み合わせてみます。
Sub SampleRightWithLen()
Dim s As String
Dim part As String
s = "ABCDEFG"
' 右から3文字目以降 → 全体の長さ - 3 + 1 文字目から最後まで
part = Mid(s, Len(s) - 3 + 1)
MsgBox part ' → "EFG"
End Sub
VBここでは Mid も使っていますが、
Len で「どこから切り始めるか」を計算しているのがポイントです。
Len を組み合わせると、
- 「右から n 文字目から m 文字」
- 「最後の k 文字を除いた部分」
のような、ちょっとひねった切り方も自然に書けるようになります。
Left / Right を使うときに意識してほしいこと
「何文字か」は“仕様”として決めておく
Left / Right は、「何文字切るか」を自分で決める関数です。
ということは、
- 商品コードの区分は必ず1文字なのか?
- 連番は必ず3桁なのか?
- 日付のフォーマットは常に
"YYYY/MM/DD"なのか?
といった「前提条件(仕様)」を、ちゃんと決めておく必要があります。
仕様がブレると、Left / Right だけでは対応しきれなくなります。
そのときは InStr で区切り文字の位置を調べてから切る、などの工夫が必要です。
「見た目」と「実際の文字数」がズレていないか
前後にスペースが入っていたり、
全角スペースが紛れ込んでいたりすると、
Left / Right で切った結果が「なんかおかしい」ことがあります。
そういうときは、
- Trim で前後のスペースを削る
- Replace で全角スペースを半角に統一する
など、「切る前の掃除」をしておくと安定します。
まとめ:Left / Right は「端から切る」ための基本ハサミ
Left / Right の本質は、とてもシンプルです。
- Left(文字列, n):左(先頭)から n 文字を取り出す
- Right(文字列, n):右(末尾)から n 文字を取り出す
そして本当に力を発揮するのは、
- 「商品コードの区分」「連番」
- 「日付文字列の年・月・日」
- 「固定桁の識別子」
のような、“端から何文字”で意味が決まっている文字列を扱うときです。
