【VBAマクロ】Left・Mid・Right関数の使い方【Excel初心者向け】

スポンサードリンク
VBA

VBAを使ったExcelのマクロ作成にて、文字列を扱うときに欠かせないのが「Left関数(Mid・Ringht)」です。
これらを使えば、文字列の一部を簡単に切り出すことができ、データ整形やレポート作成に役立ちます。

この記事では、
「Left・Mid・Right関数の基本的な使い方」から、「それぞれの違い」「実務での活用例」
までをわかりやすく解説します!

-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
エクセル使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

スポンサードリンク

Left・Mid・Right関数とは?(VBAマクロ)

Left・Mid・Right関数は、文字列から特定の位置の文字を取り出すときに使います。

例えば、「abcdefghij」という10文字の文字列があったとします。
この文字列にLeft関数を使うことで、「左から3文字分」の「abc」を取り出すことができます。
※文字数は指定可

  • Left:文字列の左側から○文字分を取り出せる
  • Mid:文字列の●文字目から○文字分を取り出せる(例:defgなど)
  • Right:文字列の右側から○文字分をを取り出せる(例:hijなど。jihにはならない)
LeftMidRightの解説画像

ではそれぞれの関数の書き方・使い方を見ていきましょう。

スポンサードリンク

Left・Mid・Right関数の書き方・使い方

まずは簡単な使い方からお見せします。

簡単な使い方

下記VBAコードは、「Left・Mid・Right」の基本構文です。

Left("文字列", 文字数) ' 「文字列」の左から「文字数」分を取り出す

Mid("文字列", 開始位置, 文字数) ' 「文字列」の「開始位置」から「文字数」分を取り出す

Right("文字列", 文字数) ' 「文字列」の右から「文字数」分を取り出す

では具体的に使ってみましょう。

Sub 文字の取り出し()
    Debug.Print Left("abcdefghij", 3)
    Debug.Print Mid("abcdefghij", 4, 5)
    Debug.Print Right("abcdefghij", 6)
End Sub

1つ1つ解説していきます。

プロシージャの作成

Sub 文字の取り出し()

End Sub

プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。

文字の取り出し

    Debug.Print Left("abcdefghij", 3)
    Debug.Print Mid("abcdefghij", 4, 5)
    Debug.Print Right("abcdefghij", 6)

それぞれの関数で取り出した文字を「Debug.Print」で表示しています。
「Debug.Print」で表示させる方法については、下記記事をご参考ください。

【Left(文字列, 文字数)】
「Left(“abcdefghij“, 3)」
今回は「文字数」を「3」にしているため、左から3文字分である「abc」が取り出されます。

【Mid(文字列, 開始位置 ,文字数)】
「Mid(“abcdefghij“, 4, 5)」
今回は「開始位置」を「4」、「文字数」を「5」にしているため、4文字目から5文字分である「defgh」が取り出されます。

【Right(文字列, 文字数)】
「Right(“abcdefghij“, 6)」
今回は「文字数」を「6」にしているため、右から6文字分である「efghij」が取り出されます。
※「jihgfe」と逆さまにはなりません

文字列は「”(ダブルクォーテーション)」で囲ってください。
囲わないとうまく動作しません。

ここで下記の疑問が生まれた方もいるかと思います。

  • 元の文字列より多く(長く)取り出した場合はどうなる?
  • スペースが含まれる場合はどうなる?
  • 文字数を「0」にした場合はどうなる?
  • Midの開始位置を「0」または「99」にした場合はどうなる?
  • Midの文字数を指定しなかった場合はどうなる?

次項で解説いたします。

よくある疑問

元の文字列より多く(長く)取り出した場合はどうなる?

下記のVBAコードを見てください。
10文字の文字列に対して、それぞれ99文字を取り出そうとした例です。

Sub 過剰な文字の取り出し()
    Debug.Print Left("abcdefghij", 99)
    Debug.Print Mid("abcdefghij", 4, 99)
    Debug.Print Right("abcdefghij", 99)
End Sub

実行結果が下図です。

過剰な文字の抜き出し例

特にエラーは出ませんでした。
「Left・Right」に関しては、元の文字がそのまま出力されています。

エラーが出ないため、予期せぬ結果になる可能性があります。ご注意ください。

スペースが含まれる場合はどうなる?

わかりやすく、「Mid」で試してみます。
下記のVBAコードを見てください。

Sub スペースが含まれる場合()
    Debug.Print Mid("a b c d e f g h i j", 4, 5)
End Sub

スペースが含まれた文字列の、4文字目(スペース)から5文字取り出そうとした例です。
実行してみましょう。

スペースが含まれる場合の結果

「 c d 」という結果が表示されました。
スペースも1文字として認識されるようです。

文字数を「0」にした場合はどうなる?

下記VBAコードは、Leftの文字数に0を指定した場合です。

Sub 文字数を0に指定()
    Debug.Print Left("abcdefghij", 0)
End Sub

どうなるのでしょうか?実行してみます。

開始位置が過剰な場合の結果

特にエラーは出ず、何も表示されませんでした。
文字を取得できなかったということです。
こちらも予期せぬ結果につながる場合があるため、注意しましょう。

Midの開始位置を「0」または「99」にした場合はどうなる?

下記のVBAコードは、「Mid」の開始位置を「0」にした場合の例です。

Sub ゼロ文字目からの取り出し()
    Debug.Print Mid("abcdefghij", 0, 5)
End Sub

実行してみましょう。

Midでゼロ文字目からの抜き出しした場合のエラー

エラーが出ました。マイナスを指定した場合も同様です。
今度は、開始位置が元の文字数を超えた場合の例です。

Sub 九九文字目からの取り出し()
    Debug.Print Mid("abcdefghij", 99, 5)
End Sub
開始位置が過剰な場合の結果

実行しましたが、何も表示されませんでした。
こちらも文字を取得できなかったということです。
何度も言いますが、予期せぬ結果につながる場合があるため、注意しましょう。

Midの文字数を指定しなかった場合はどうなる?

下記のVBAコードは、「Mid」の文字数を指定しなかった例です。

Sub 文字数を指定しなかったMid()
    Debug.Print Mid("abcdefghij", 4)
End Sub

本来であれば、開始位置(4)の後ろに文字数を指定するのですが、今回は指定していません。
実行してみましょう。

文字数を指定しなかったMidの例

特にエラーは出ませんでした。
文字数を指定しなかった場合は、開始位置から最後までが表示されるようです。
これは、「99」などと過剰な文字数を指定した時と同じ結果です。

何度も言いますが、エラーが出ないため、予期せぬ結果になる場合があります。ご注意ください。

ここまで簡単な使い方を解説いたしました。
ここからは、少し高度な使い方を見ていきましょう。

少し高度な使い方

これまでは、Mid関数の中に直接文字列や数値を書き込みしていましたが、変数を経由して指定してみましょう。
まずは下記のVBAコードを見てください。

Sub 変数を経由()
    Dim moji As String
    Dim start As Integer
    Dim num As Integer

    moji = "abcdefghij"
    start = 4
    num = 5

    Debug.Print Mid(moji, start, num)
End Sub

2~4行目で変数を宣言し、6~8行目で値を代入しています。
変数については下記記事で詳しく解説しております。ご参考ください。

10行目にてMid関数を使って文字を取り出ししていますが、
それぞれ変数を当てはめることで、同じ結果が得られます。

Mid(変数moji「abcdefghij」, start「4」, num「5」)
文字列「abcdefghij」の「4文字目」から「5文字取り出す」

変数を経由した結果

変数は「”(ダブルクォーテーション)」で囲わなくてOKです。
囲うと逆にうまく動作しません。

よくある活用パターン

「123-456-789」のように、「-」などの区切り文字が入った文字列の「-」までを取り出す例です。
下記のVBAコードを見てください。

Sub 変数を経由()
    Dim moji As String
    Dim num As Integer
    
    moji = "123-456-789"
    num = InStr(moji, "-") - 1 ' 4-1で3
    
    Debug.Print Left(moji, num)
End Sub

InStr関数で「-」までの文字数(num)を取得し、その文字数をLeft関数に適用しています。
InStr関数については下記記事をご参考ください。

スポンサードリンク

うまく動作しないときの対処法

エラーが発生する

コンパイルエラー・実行時エラー

コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。

また今回の場合は、Mid関数の開始位置を「0」やマイナスにした場合もエラーが出ます。

警告表示

マクロが無効になっている表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。

スポンサードリンク

最後に

VBAの「Left・Mid・Right」関数について解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました