VBA入門
Midステートメント

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2021-11-20

第101回.Midステートメント


Midステートメントは、文字列変数の一部を他の文字列に置き換えます。
これは、マクロVBAのステートメントであり、Mid関数とは根本的に違うものです。


Mid関数と誤解されがちですが、全く別物になります。

Mid関数は、文字列の一部を取り出す関数ですが、
Midステートメントは、文字列の一部を置換するものです。


Midステートメント

Mid(stringvar, start[, length]) = string

stringvar 必ず指定します。
変更する文字列変数の名前を指定します。
start 必ず指定します。
バリアント型 (内部処理形式 Long) の値を指定します。
引数 stringvar の中の置き換えを始める位置を文字数単位で指定します。
length 省略可能です。
バリアント型 (内部処理形式 Long) の値を指定します。
置き換えを行う文字数を指定します。
省略すると、文字列すべてが対象となります。
string 必ず指定します。
新しく置き換える文字列式を指定します。

Midステートメントを実行しても、元の文字列の文字数は変更できません。

startに、stringvarの文字数よりも大きい値を指定するとエラーとなります。
start + length が、stringvarの文字数を超える場合は、stringvarの文字数までが置換対象となります。
string(置き換える文字列)がlengthを超えている場合は、lengthの文字数までが有効となります。
実際には、lengthは省略し、stringの文字数が置換されるようにします。


MidBステートメント

Midステートメントのバイト処理になります。
構文はMidステートメントと同様となっています。

文字列に格納されたバイトデータには、MidBステートメントを使用してください。
MidBステートメントでは、置換を開始するstringvar内のバイト位置をstartで指定し、置き換えるバイト数をlengthで指定します。


Midステートメントの使用例

Dim MyString As String
MyString = "ABCDEF"
Mid(MyString, 3, 2) = "cd"
MsgBox MyString

”ABcdEF”と表示されます。


Midステートメントの必要性

文字列の特定の位置の決められた文字数を置換したいという事は、滅多にあることではありません。
文字列の置換であれば、
Replaceメソッド
・Replaceメソッド の構文 ・Replaceメソッドの注意点 ・Replaceメソッドの使用例 ・ReplaceメソッドとReplace関数の使い分け
または、
Replace関数
Replace関数は、指定された文字列の一部を、別の文字列で指定された回数分で置換した文字列を返します。引数compareの指定りより、全角半角、大文字小文字の扱いが変わります。Replace関数 Replace(expression,find,replace[,start[,count[,compare]]]) …
これらを使う事が多くなります。

では、Midステートメントが活躍する場面とは、どのような場面でしょうか。
例えば、データに、
1234-1234-1234
2345-1234-1234
・・・
このようなデータがあるとして、
この真ん中の1234だけを2345に変更するとした場合、
Replace関数だと、単純な置換ができません。
以下では参考VBAとして、「1234-1234-1234」の置換をしています。

Dim str As String
str = "1234-1234-1234"
str = Left(str, 5) & Replace(str, "1234", "2345", 6, 1)

Replace関数では、かなり面倒な処理となっています。
(これをFunctionにして関数化しておけばよいとは言えますが)

Dim str As String
str = "1234-1234-1234"
Mid(str, 6) = "2345"

Midステートメントを使う事で、これだけで済んでしまいます。
そして、何よりも、
Midステートメントの良さは、処理が高速であるという事です。
置換すべきデータ量が膨大で、置換処理に時間がかかっているような場合は、
Midステートメントが使えないかを検討して下さい。


実践での使用例

遅い文字列結合を最速処理する方法について
VBAは遅い… よく聞くことですが、確かに普通にコード記述しているととても遅いことがあります、その代表の一つに、文字列結合があります、文字列結合を最速処理する方法について解説します。そもそも文字列結合は、なぜ遅いのか、String型(可変長文字列)についての基礎知識が必要です。
この記事では、Midステートメントを使う事で、文字列結合を高速化できることを紹介しています。




同じテーマ「マクロVBA入門」の記事

第107回.プロシージャーの引数
第108回.変数の適用範囲(スコープ,Private,Public)
第100回.InputBoxメソッド(インプットボックス)
第101回.Midステートメント
第102回.Intersectメソッド
第103回.UnionメソッドとAreasプロパティ
第104回.GetPhoneticメソッドとSetPhoneticメソッド(フリガナ)
第109回.列挙型(列挙体)Enum
第110回.ユーザー定義型・構造体(Type)
第111回.静的配列
第112回.動的配列(Redim)


新着記事NEW ・・・新着記事一覧を見る

ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ