業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、文字列を分割して抽出する3つの関数Left、Right、Mid、文字列から空白を除去する3つの関数LTrim、RTrim、Trimの使い方について解説します。
今回のTipsも関数の使い方について解説する。今回は、「Left」「Right」「Mid」という文字列を分割して抽出する3つの関数と「LTrim」「RTrim」「Trim」という文字列から空白を除去する3つの関数の使い方だ。なお、関数の基本的な使い方については、Tips「コンパイルエラーにならない関数の使い方――括弧の有無、複数の引数、Callステートメント、戻り値、名前付き引数と順番」を参照してほしい。
「Left」関数は、文字列の左端から、指定された文字数分の文字列を分割して抽出する関数だ。
Left(string,length)
「string」には、左端から分割して抽出する対象となる文字列式を指定する。「length」には、分割する文字列の文字数を指定する。
「Left」という新しいシートを用意し、図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
セル「C2」と「C3」が未入力の場合はメッセージを発して処理を抜ける(2〜4行目)。それ以外は6〜11行目の処理を行う。
「IsNumeric」関数でセル「C3」に入力された値が、数値ではない場合は警告メッセージを表示して、処理を抜ける(6〜8行目)。それ以外は、「Left」関数を使ってセル「C2」に入力された文字列から、セル「C3」に入力された値までを左から抽出してセル「B5」に表示する(10行目)。
このリスト1のマクロを「実行」ボタンに関連付け、実行した結果が図2だ。
「Right」関数は、文字列の右端から、指定された文字数分の文字列を分割して抽出する関数だ。先ほどの「Left」関数の兄弟のような関数だ。
Right(string,length)
「string」には、右端から分割して抽出する対象となる文字列式を指定する。「length」には、分割する文字列の文字数を指定する。
「Right」という新しいシートを追加し、図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
セル「C2」と「C3」が未入力なら警告メッセージを表示して処理を抜ける(2〜4行目)。それ以外は6〜12行目の処理を行う。
「IsNumeric」関数でセル「C3」に入力された値が数値ではない場合は、警告メッセージを発して処理を抜ける(6〜8行目)。それ以外は、「Right」関数を使って、指定した文字列の右から指定した文字数を抽出してセル「C4」に表示する(10行目)。
このリスト2のマクロを「実行」ボタンに関連付け、実行した結果が図4だ。
「Mid」関数は、指定された開始位置から、指定された文字数分の文字列を分割して抽出する関数だ。
Mid(string,start,length)
「string」では、元の文字列を指定する。「start」では、どの位置から文字列を取り出すかを、先頭からの何番目かの数値で指定する。先頭の位置を「1」とする。「length」では、取り出す文字列の数を指定する。
「Mid」という新しいシートを追加し、図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
文字列型の変数「番号」を宣言する(2行目)。Integer型の変数「i」を宣言する(3行目)。
変数「i」を「2」から「7」まで繰り返す(4〜7行目)。この数値は行番号に当たる。
反復処理の過程で、変数「番号」に「i」行目の「2列目(B列)」の値を格納していく(5行目)。
変数「i」行目の「3列目(C列)」に、「Mid」関数を使って、変数「番号」が格納している値、つまり「4番目」から「2文字」を取り出して表示する(6行目)。
このリスト3のマクロを「取得」ボタンに関連付け、実行した結果が図6だ。
「LTrim」関数は、指定された文字列から左側の空白(スペース)を除去した文字列を返す関数だ。
LTrim(string)
「string」には、任意の文字列を指定する。
「LTrim」という新しいシートを追加し、その中に、図7のように空白の入った文字列を表示するセルと、「LTrim」関数で左の空白を削除した文字列を表示するセルを用意しておく。セル「B2」と「B3」はExcelのメニューから「左詰め」で表示されるように設定しておく。
「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
文字列型の変数「myName1」と「myName2」を宣言する(3〜4行目)。変数「myName1」には前に空白を入れた「 薬師寺国安」という値を格納しておく(5行目)。
変数「myName2」には「LTrim」関数を使って「myName1」に格納した値から、左の空白を削除した値を格納しておく(6行目)。
セル「B2」に空白を含んだ「myName1」変数の値を表示し、セル「B3」には「LTrim」関数で左の空白を削除した「myName2」の値を表示する(7〜8行目)。
「Sub LTrim関数の使い方」プロシージャ内にフォーカスを移し、VBEメニューの[実行]→[Sub/ユーザーフォームの実行]と選択して実行する。
実行すると図8のように、空白を含んだデータと、空白を削除したデータが表示される。
「RTrim」関数は、指定された文字列から、末尾(右側)の空白(スペース)を除去した文字列を返す関数だ。
RTrim(string)
「string」には、任意の文字列を指定する。
「RTrim」という新しいシートを用意し、図9のように「末尾に空白の入った文字列」を表示するセルと、「末尾から空白を削除した文字列」を表示するセルと、「実行」ボタンを配置しておく。セル「C2」と「C3」はExcelのメニューから「右詰め」で表示されるように設定しておく。
「実行」ボタンをクリックして文字列を表示するマクロはリスト5になる。VBEを起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト5のマクロを記述する。
Sub RTrim関数の使い方() Dim 氏名 As String 氏名 = "薬師寺国安 " Range("C2").Value = 氏名 Range("C3").Value = RTrim(氏名) End Sub
文字列型の変数「氏名」を宣言し、末尾に空白を入れた「薬師寺国安 」で初期化しておく(2〜3行目)。
末尾に空白の入った氏名をセル「C2」に表示し、「RTrim」関数で末尾から空白を削除した氏名をセル「C3」に表示する(4〜5行目)。
このリスト5のマクロを「実行」ボタンに関連付け、実行した結果が図10だ。
「Trim」関数は、先頭(左側)と末尾(右側)の空白(スペース)を除去した文字列を返す関数だ。ここまでに紹介した「LTrim」と「RTrim」の機能を全部有しているのが「Trim」関数だ。
●Trim関数の書式 Trim(string)
「string」は必須項目で、前後の空白を取り除く文字列を指定する。
「Trim」という新しいシートを追加し、その中に図11のように「前後に空白の入った文字列」の表示されるセルと、「前後の空白を削除した文字列」の表示されるセルと、「実行」ボタンを用意しておく。
「実行」ボタンをクリックして、「前後に空白の入った文字列」と「前後の空白を除いた文字列」を表示するマクロはリスト6になる。VBEを起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト6のマクロを記述する。
Sub Trim関数の使い方() Dim 名前 As String 名前 = " 薬師寺国安 " Range("C2").Value = "私は" & 名前 & "です。" Range("C3").Value = "私は" & Trim(名前) & "です。" End Sub
文字列型の変数「名前」を宣言し、変数「名前」を前後に空白の入った「 薬師寺国安 」で初期化する(2〜3行目)。
セル「C2」に前後に空白の入った「名前」変数の値を表示し、セル「C3」に「Trim」関数で前後の空白を取り除いた「名前」を表示する(4〜5行目)。
このリスト6のマクロを「実行」ボタンに関連付け、実行した結果が図12だ。
「Right」関数は、文字列式の右から指定した分の文字を返してくれる。例えば、宝くじの番号が入力されているデータから、「末尾番号」だけを取得する場合に利用すると便利ではないだろうか。使い方によっては、「Left」関数と絡めて、多くの処理に応用できそうである。面白いアイデアを出して、ぜひとも使っていただきたい。
また、「Mid」関数の使い道は、かなりあると思う。文字列から必要な箇所の文字数だけを取得したい場合は、日常業務においても多々あるのではないだろうか。例えば、「平成26年04月20日」で「04月」だけが必要な場合に、この「Mid」関数を使うと便利だ。
さて、前後の空白を取り除く「Trim」関数は、実際の業務でどのように使えばいいのだろうか。多分、単体で使用することはないだろう。テキストファイルを読み込み、そのファイルの中に余分な空白が入っていた場合に、削除して表示させる、といった場合に使用できるのではないだろうか。
次回も引き続き、関数について解説する予定だ。お楽しみに。
薬師寺国安事務所代表。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 © ITmedia, Inc. All Rights Reserved.