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 ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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