Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで指定した文字以降を取得する-Mid・InStr関数

VBAで指定した文字以降を取得する-Mid・InStr関数

対象:Excel2007, Excel2010, Excel2013

「エクセルvbaのmid関数である文字数から最後の文字までという指定はできるのか」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

VBA(Visual Basic for Applications)のMid関数の使い方を調べている方による検索です。

「エクセルvbaのmid関数である文字から最後の文字までという指定はできるのか」
という検索はタイプミスで本当は
「エクセルvbaのmid関数である文字から最後の文字までという指定はできるのか」
という検索をしたかったのではないかと想像しています。

[スポンサードリンク]

Mid関数の基本

まずは、
「エクセルvbaのmid関数である文字数から最後の文字までという指定はできるのか」
という検索をそのままの疑問とした場合の回答から。
Sub Mid関数の基本()
 Dim txt As String
 txt = Range("A1").Value
 MsgBox Mid(txt, 5)
End Sub

例えば、A1セルに「ito@example.com」という文字列が入力されているときに、上記のマクロを実行するとメッセージボックスには
「example.com」
と表示されます。

Mid関数は、第1引数に指定された文字列から、第2引数に指定された数値以降の文字列を返す関数です。
「Mid(txt, 5)」
で、変数・txtに格納されている文字列から、5文字目以降を取得することができます。

ここで、
「Mid(txt, 5, 7)」
と第3引数まで指定したときには、第3引数として指定された「7」文字「example」という文字列が返されます。

「エクセルvbaのmid関数である文字数から最後の文字までという指定はできるのか」
という疑問については、Mid関数で第2引数までを指定して、第3引数を省略してやればいいわけです。

Mid関数で指定した文字以降を取得

「エクセルvbaのmid関数である文字から最後の文字までという指定はできるのか」

「エクセルvbaのmid関数である文字から最後の文字までという指定はできるのか」
のタイプミスだった場合の回答です。

例えば
「ito@example.com」
「kiyoto@example.edu」
のような文字列があったときに、「@」より後ろの文字列を取得したいという要望が実務ではよく出ます。

そのようなときには、Mid関数に、文字列から文字を探して文字の位置を返すInStr関数を組み合わせます。
Sub Mid関数である文字以降を取得する()
 Dim txt As String
 txt = Range("A1").Value
 MsgBox Mid(txt, InStr(txt, "@") + 1)
End Sub

A1セルに
「ito@example.com」
と入力されているときに上記のマクロを実行すると
「example.com」
がメッセージボックスに表示され
「kiyoto@example.edu」
と入力されていれば
「example.edu」
が表示されます。

いずれも「@」より後ろの文字列がメッセージボックスに表示されます。

「InStr(txt, "@")」
という数式は、変数・txtに格納されている文字列から「@」を探して、みつかった文字位置を返しますから、
「ito@example.com」
なら「4」
「kiyoto@example.edu」
なら「7」
が返されます。

「@」より後ろの文字列を取得したいので「InStr(txt, "@")」に「+1」した「InStr(txt, "@") + 1」を、Mid関数の第2引数に指定したのが、
「Mid(txt, InStr(txt, "@") + 1)」
の意味です。

ワークシート関数のFIND関数に似ているのが、VBAのInStr関数です。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで指定した文字以降を取得する-Mid・InStr関数

「VBA関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.