VBA

Mid関数とMidステートメント

投稿日:2016.02.14 更新日:

Excel VBA のヘルプで「Mid」と検索すると、Midキーワードは「Mid関数」と「Midステートメント」の2つの構文で使用される旨の説明が表示されます。今回はこの「Mid関数」と「Midステートメント」の違いについて説明します。

Mid関数

Mid関数はよく使われる文字列操作の代表的な関数です。説明する程でもないですが、機能と構文を一応載せときますね。

機能:文字列の指定した位置から指定した長さの文字列取り出し、バリアント型 (内部処理形式 String の Variant) の値を返す。
構文:Mid(string, start[, length])

引数 指定 内容
string 必須 文字列を取り出す元の文字列を指定します。
start 必須 取り出し開始位置を長整数型 (Long)で指定します。先頭(1文字目)は1になります。引数stringの文字数より大きい値を指定した場合は空文字””(長さ0の文字列)を返します。
 length 省略可 引数startで指定した位置から取り出す文字数をバリアント型 (内部処理形式 Long)で指定します。この引数を省略した場合は引数startで指定した位置以降のすべての文字列を返します。また、引数startからの文字数が引数lengthよりより少ない場合も引数startで指定した位置以降のすべての文字列を返します。

使用例:「Dev-Clips」という文字列から「- (ハイフン)」を取り出すには、4文字目から1文字取り出せばよいので以下のように指定します。

Mid関数使用例 - 4文字目の「-」を取り出す

Excel VBAで開発していれば使用したことがない方はいないんじゃないかってくらいメジャーな関数ですよね。これは問題ないと思います。

Midステートメント

Mid関数がある文字列から指定した位置・文字数の文字列を取り出すのに対し、Midステートメントは文字列の一部を他の文字列に置き換えます。

機能:バリアント型 (内部処理形式 String の Variant) 変数の一部を他の文字列に置き換える。
構文:Mid(stringvar, start[, length]) = string

引数 指定 内容
stringvar 必須 変更元の文字列変数を指定します。
start 必須 置き換え開始位置をバリアント型 (内部処理形式 Long) で指定します。先頭(1文字目)は1になります。
 length 省略可 引数startで指定した位置から置き換える文字数をバリアント型 (内部処理形式 Long)で指定します。この引数を省略した場合は引数startで指定した位置以降のすべての文字列が置き換えられます。また、引数startからの文字数が引数lengthよりより少ない場合も引数startで指定した位置以降のすべての文字列が置き換えられます。
string 必須 新しく置き換える文字列を指定します。

使用例:「Dev-Clips」という文字列の4文字目の「- (ハイフン)」を「@」に置き換えるには以下のように指定します。

Midステートメント使用例 - 4文字目の「-」を「@」に置換

よく使われるMid関数の構文と違って左オペランドにMidステートメントが来るのでなんだか違和感がありますが、使い方によってはとても便利なステートメントですね。

まとめ。

よく使われるのは文字列を取り出すMid関数の方でしょうか、機能的にも実用的ですしね。一方、文字列置き換えのMidステートメントはあまり使い道がないように思えます。文字列置換と言えばReplace関数が Excel VBA には用意されていますしね。ただ、このMidステートメントは文字列連結で大きな力を発揮します。

文字列連結での効果的なMidステートメントの使用方法はこのエントリーでは触れませんが、近いうちに別記事で掲載致します。現在執筆中ですのでしばらくお待ちください。

Midステートメントを使用した文字列の連結方法に関する記事を公開しました。高パフォーマンスの文字列連結処理が可能となる内容になってます。文字列連結の仕組みにもちょろっと触れてますので是非ご覧ください:)

Excel VBA でStringBuilderを使う – http://dev-clips.com/clip/vba/stringbuilder-for-vba/

それにしても、同じ名前の関数・ステートメントでも構文が異なるものが Excel VBA には存在するんですね、紛らわしい(^^;

ご質問などございましたらお気軽にお問合せくださいまし。

HAYs

-VBA
-,


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

berry

不定の引数を定義するParamArrayキーワード

Excel ワークシート関数のSUM関数やMAX関数は可変の引数を渡すことができます。 VBA のプロシージャでも同じように不定の引数を扱う場合は ParamArrayキーワード を使用します。 今回 …

StringBuilder For Excel VBA

Excel VBAでStringBuilderを使う

 VB.NET には StringBuilder というクラスが実装されています。このクラスは文字列連結に特化しており、ループ内での文字列連結など処理中に文字列の連結が何度も出現する場合にその力を発揮 …

【Excel VBA】ブックが閉じられた事を検出する方法

先日ちょっとしたツールを作っている時に他のブックが閉じられた事を検出したい場面に遭遇したのですが、WorkbookオブジェクトにもApplicationオブジェクトにも既定のイベントにはそれっぽいのは …

options

省略可能な引数を定義するOptionalキーワード

Excel VBA で省略可能な引数を持つプロシージャを作成するにはOptionalキーワードを使用します。このエントリーではOptionalキーワードの概要を説明します。 Optionalキーワード …

VBA配列基礎

通常の変数は1つの変数に1つの値しか格納できませんが、配列を利用すれば一つの変数に同じデータ型の複数の値を格納することができます。このエントリーでは、VBAで配列を利用するための基本事項をご紹介致しま …