連載
» 2015年04月16日 05時00分 UPDATE

VBA/マクロ便利Tips:Excelで文字列を分割して抽出する関数と、文字列から空白を除去する関数の使い方

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、文字列を分割して抽出する3つの関数Left、Right、Mid、文字列から空白を除去する3つの関数LTrim、RTrim、Trimの使い方について解説します。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


 今回のTipsも関数の使い方について解説する。今回は、「Left」「Right」「Mid」という文字列を分割して抽出する3つの関数と「LTrim」「RTrim」「Trim」という文字列から空白を除去する3つの関数の使い方だ。なお、関数の基本的な使い方については、Tips「コンパイルエラーにならない関数の使い方――括弧の有無、複数の引数、Callステートメント、戻り値、名前付き引数と順番」を参照してほしい。


Left関数

 「Left」関数は、文字列の左端から、指定された文字数分の文字列を分割して抽出する関数だ。

Left関数の書式

Left(string,length)


 「string」には、左端から分割して抽出する対象となる文字列式を指定する。「length」には、分割する文字列の文字数を指定する。

 「Left」という新しいシートを用意し、図1のように「氏名」を入力するセルと、「左から取り出す文字数」を指定するセルと「実行」ボタンを配置しておく。

ExcelVBA6Tips_05.png 図1 「氏名」を入力するセルと、「左から取り出す文字数」を指定するセルと「実行」ボタンを配置しておく

 「実行」ボタンをクリックして、入力された「氏名」から、指定した文字を左から任意の数値分取り出すマクロはリスト1になる。VBE(Visual Basic Editor)を起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト1のマクロを記述する。

Sub Left関数の使い方()
  If Range("C2").Value = "" Or Range("C3").Value = "" Then
    MsgBox "未入力の箇所があります。"
    Exit Sub
  Else
    If IsNumeric(Range("C3").Value) = False Then
      MsgBox "取り出す文字数には数値を指定してください。"
      Exit Sub
    Else
      Range("B5").Value = Left(Range("C2").Value, Range("C3").Value)
    End If
  End If
End Sub
リスト1 入力された「氏名」から、指定した文字を左から任意の数値分取り出すマクロ

 セル「C2」と「C3」が未入力の場合はメッセージを発して処理を抜ける(2〜4行目)。それ以外は6〜11行目の処理を行う。

 「IsNumeric」関数でセル「C3」に入力された値が、数値ではない場合は警告メッセージを表示して、処理を抜ける(6〜8行目)。それ以外は、「Left」関数を使ってセル「C2」に入力された文字列から、セル「C3」に入力された値までを左から抽出してセル「B5」に表示する(10行目)。

 このリスト1のマクロを「実行」ボタンに関連付け、実行した結果が図2だ。

ExcelVBA6Tips_06.png 図2 指定した文字列の左から「3」文字の「佐々木」を抽出して表示した

Right関数

 「Right」関数は、文字列の右端から、指定された文字数分の文字列を分割して抽出する関数だ。先ほどの「Left」関数の兄弟のような関数だ。

Right関数の書式

Right(string,length)


 「string」には、右端から分割して抽出する対象となる文字列式を指定する。「length」には、分割する文字列の文字数を指定する。

 「Right」という新しいシートを追加し、図3のように「文字列」を表示するセルと、「右から何文字」取り出すかを入力するセルと「結果」を表示するセルを用意し、「実行」ボタンを配置しておく。

ExcelVBA9Tips_05.png 図3 「文字列」を表示するセルと、「右から何文字」分割するかを入力するセルと「結果」を表示するセルを用意し、「実行」ボタンを配置しておく

 「実行」ボタンをクリックして文字を取り出すマクロはリスト2になる。VBEを起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト2のマクロを記述する。

Sub Right関数の使い方()
  If Range("C2").Value = "" Or Range("C3").Value = "" Then
    MsgBox "未入力か所があります。"
    Exit Sub
  Else
    If IsNumeric(Range("C3").Value) = False Then
     MsgBox "数値を入力してください。"
     Exit Sub
    Else
     Range("C4").Value = Right(Range("C2").Value, Range("C3").Value)
    End If
  End If
End Sub
リスト2 「Right」関数を使って文字を取り出すマクロ

 セル「C2」と「C3」が未入力なら警告メッセージを表示して処理を抜ける(2〜4行目)。それ以外は6〜12行目の処理を行う。

 「IsNumeric」関数でセル「C3」に入力された値が数値ではない場合は、警告メッセージを発して処理を抜ける(6〜8行目)。それ以外は、「Right」関数を使って、指定した文字列の右から指定した文字数を抽出してセル「C4」に表示する(10行目)。

 このリスト2のマクロを「実行」ボタンに関連付け、実行した結果が図4だ。

ExcelVBA9Tips_06.png 図4 指定した文字列の右から「2」文字の「道後」を抽出して表示した

Mid関数

 「Mid」関数は、指定された開始位置から、指定された文字数分の文字列を分割して抽出する関数だ。

Mid関数の書式

Mid(string,start,length)


 「string」では、元の文字列を指定する。「start」では、どの位置から文字列を取り出すかを、先頭からの何番目かの数値で指定する。先頭の位置を「1」とする。「length」では、取り出す文字列の数を指定する。

 「Mid」という新しいシートを追加し、図5のように「数値」の入力されたセルと、「Mid関数」で取り出された値を表示するセル(C列)と、「取得」ボタンを配置しておく。

ExcelVBA7Tips_06.png 図5 「数値」の入力されたセルと、「Mid関数」で取り出された値を表示するセル(C列)と、「取得」ボタンを配置した

 「取得」ボタンをクリックして入力されているデータから「10」〜「15」の値を取り出すマクロはリスト3になる。VBEを起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト3のマクロを記述する。

Sub Mid関数の使い方()
  Dim 番号 As String
  Dim i As Integer
  For i = 2 To 7
    番号 = Cells(i, 2)
    Cells(i, 3) = Mid(番号, 4, 2)
  Next
End Sub
リスト3 入力されているデータから「10」〜「15」の値を取り出すマクロ

 文字列型の変数「番号」を宣言する(2行目)。Integer型の変数「i」を宣言する(3行目)。

 変数「i」を「2」から「7」まで繰り返す(4〜7行目)。この数値は行番号に当たる。

 反復処理の過程で、変数「番号」に「i」行目の「2列目(B列)」の値を格納していく(5行目)。

 変数「i」行目の「3列目(C列)」に、「Mid」関数を使って、変数「番号」が格納している値、つまり「4番目」から「2文字」を取り出して表示する(6行目)。

 このリスト3のマクロを「取得」ボタンに関連付け、実行した結果が図6だ。

ExcelVBA7Tips_07.png 図6 「Mid」関数で指定した文字数分を取り出している

LTrim関数

 「LTrim」関数は、指定された文字列から左側の空白(スペース)を除去した文字列を返す関数だ。

LTrim関数の書式

LTrim(string)


 「string」には、任意の文字列を指定する。

 「LTrim」という新しいシートを追加し、その中に、図7のように空白の入った文字列を表示するセルと、「LTrim」関数で左の空白を削除した文字列を表示するセルを用意しておく。セル「B2」と「B3」はExcelのメニューから「左詰め」で表示されるように設定しておく。

ExcelVBA7Tips_04.png 図7 左に空白の入ったデータを表示するセルと、空白を削除したデータを表示するセルを作成しておく

 「LTrim」関数で、左の空白を削除するマクロはリスト4だ。VBEを起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト4のマクロを記述する。

Sub LTrim関数の使い方()
  Dim myName1 As String
  Dim myName2 As String
  myName1 = "  薬師寺国安"
  myName2 = LTrim(myName1)
  Range("B2").Value = myName1
  Range("B3").Value = myName2
End Sub
リスト4 「LTrim」関数で左の空白を除去するマクロ

 文字列型の変数「myName1」と「myName2」を宣言する(3〜4行目)。変数「myName1」には前に空白を入れた「  薬師寺国安」という値を格納しておく(5行目)。

 変数「myName2」には「LTrim」関数を使って「myName1」に格納した値から、左の空白を削除した値を格納しておく(6行目)。

 セル「B2」に空白を含んだ「myName1」変数の値を表示し、セル「B3」には「LTrim」関数で左の空白を削除した「myName2」の値を表示する(7〜8行目)。

 「Sub LTrim関数の使い方」プロシージャ内にフォーカスを移し、VBEメニューの[実行]→[Sub/ユーザーフォームの実行]と選択して実行する。

 実行すると図8のように、空白を含んだデータと、空白を削除したデータが表示される。

ExcelVBA7Tips_05.png 図8 空白を含んだデータと、空白を削除したデータが表示された

RTrim関数

 「RTrim」関数は、指定された文字列から、末尾(右側)の空白(スペース)を除去した文字列を返す関数だ。

RTrim関数の書式

RTrim(string)


 「string」には、任意の文字列を指定する。

 「RTrim」という新しいシートを用意し、図9のように「末尾に空白の入った文字列」を表示するセルと、「末尾から空白を削除した文字列」を表示するセルと、「実行」ボタンを配置しておく。セル「C2」と「C3」はExcelのメニューから「右詰め」で表示されるように設定しておく。

ExcelVBA10Tips_05.png 図9 「末尾に空白の入った文字列」を表示するセルと、「末尾から空白を削除した文字列」を表示するセルと、「実行」ボタンを配置する

 「実行」ボタンをクリックして文字列を表示するマクロはリスト5になる。VBEを起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト5のマクロを記述する。

Sub RTrim関数の使い方()
  Dim 氏名 As String
  氏名 = "薬師寺国安 "
  Range("C2").Value = 氏名
  Range("C3").Value = RTrim(氏名)
End Sub
リスト5 「RTrim」関数で右の空白を除去するマクロ

 文字列型の変数「氏名」を宣言し、末尾に空白を入れた「薬師寺国安 」で初期化しておく(2〜3行目)。

 末尾に空白の入った氏名をセル「C2」に表示し、「RTrim」関数で末尾から空白を削除した氏名をセル「C3」に表示する(4〜5行目)。

 このリスト5のマクロを「実行」ボタンに関連付け、実行した結果が図10だ。

ExcelVBA10Tips_06.png 図10 「RTrim」関数で末尾の空白の削除された氏名が表示された

Trim関数

 「Trim」関数は、先頭(左側)と末尾(右側)の空白(スペース)を除去した文字列を返す関数だ。ここまでに紹介した「LTrim」と「RTrim」の機能を全部有しているのが「Trim」関数だ。

●Trim関数の書式
Trim(string)

 「string」は必須項目で、前後の空白を取り除く文字列を指定する。

 「Trim」という新しいシートを追加し、その中に図11のように「前後に空白の入った文字列」の表示されるセルと、「前後の空白を削除した文字列」の表示されるセルと、「実行」ボタンを用意しておく。

ExcelVBA13Tips_05.png 図11 「前後に空白の入った文字列」の表示されるセルと、「前後の空白を削除した文字列」の表示されるセルと「実行」ボタンを配置しておく

 「実行」ボタンをクリックして、「前後に空白の入った文字列」と「前後の空白を除いた文字列」を表示するマクロはリスト6になる。VBEを起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト6のマクロを記述する。

Sub Trim関数の使い方()
  Dim 名前 As String
  名前 = " 薬師寺国安 "
  Range("C2").Value = "私は" & 名前 & "です。"
  Range("C3").Value = "私は" & Trim(名前) & "です。"
End Sub
リスト6 「Trim」関数を使って左右の空白を除去した文字列を表示するマクロ

 文字列型の変数「名前」を宣言し、変数「名前」を前後に空白の入った「 薬師寺国安 」で初期化する(2〜3行目)。

 セル「C2」に前後に空白の入った「名前」変数の値を表示し、セル「C3」に「Trim」関数で前後の空白を取り除いた「名前」を表示する(4〜5行目)。

 このリスト6のマクロを「実行」ボタンに関連付け、実行した結果が図12だ。

ExcelVBA13Tips_06.png 図12 前後に空白の入った名前と、「Trim」関数で、前後の空白の取り除かれた氏名が表示される

まとめ

 「Right」関数は、文字列式の右から指定した分の文字を返してくれる。例えば、宝くじの番号が入力されているデータから、「末尾番号」だけを取得する場合に利用すると便利ではないだろうか。使い方によっては、「Left」関数と絡めて、多くの処理に応用できそうである。面白いアイデアを出して、ぜひとも使っていただきたい。

 また、「Mid」関数の使い道は、かなりあると思う。文字列から必要な箇所の文字数だけを取得したい場合は、日常業務においても多々あるのではないだろうか。例えば、「平成26年04月20日」で「04月」だけが必要な場合に、この「Mid」関数を使うと便利だ。

 さて、前後の空白を取り除く「Trim」関数は、実際の業務でどのように使えばいいのだろうか。多分、単体で使用することはないだろう。テキストファイルを読み込み、そのファイルの中に余分な空白が入っていた場合に、削除して表示させる、といった場合に使用できるのではないだろうか。

 次回も引き続き、関数について解説する予定だ。お楽しみに。

著者紹介

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

kuniyasu.jpg

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。