「エクセルvbaのmid関数である文字数から最後の文字までという指定はできるのか」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
VBA(Visual Basic for Applications)のMid関数の使い方を調べている方による検索です。
「エクセルvbaのmid関数である文字数から最後の文字までという指定はできるのか」
という検索はタイプミスで本当は
「エクセルvbaのmid関数である文字から最後の文字までという指定はできるのか」
という検索をしたかったのではないかと想像しています。
Mid関数の基本
まずは、「エクセルvbaの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」
のような文字列があったときに、「@」より後ろの文字列を取得したいという要望が実務ではよく出ます。
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関数です。
- Newer:変更履歴のすべての変更を反映するWordマクロ
- Older:新しいブログ-第21回東京ブロガーミートアップ #tbmu
Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで指定した文字以降を取得する-Mid・InStr関数