ExcelマクロVBA入門
第101回.Midステートメント

Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
最終更新日:2018-02-06

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


Midステートメントは、文字列変数の一部を他の文字列に置き換えます。


これは、VBAのステートメントで、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の文字数が置換されるようにします。



使用例.

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

”ABcdEF”と表示されます。



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

文字列の特定の位置の決められた文字数を置換したいという事は、滅多にあることではありません。

文字列の置換であれば、
Replaceメソッド、または、Replace関数
これらを使う事がほとんどになります。

では、Midステートメントが活躍する場面とは何かという事になります。

例えば、データに、
1234-1234-1234
2345-2345-2345
・・・
このようなデータがあるとして、
この真ん中の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関数では、かなり面倒な処理となっています。

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

Midステートメントを使う事で、これだけで済んでしまいます。

そして、何よりも、

Midステートメントの良さは、処理が高速であるという事です。

置換すべきデータ量が膨大で、置換処理に時間がかかっているような場合は、
Midステートメントが使えないかを検討して下さい。



実践での使用例

遅い文字列結合を最速処理する方法について

この記事では、Midステートメントを使う事で、文字列結合を高速化できることを紹介しています。






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

Findメソッド(Find,FindNext,FindPrevious)
Replaceメソッド(置換)
InputBoxメソッド(インプットボックス)
Midステートメント
Intersectメソッド
Unionメソッド
GetPhoneticメソッドとSetPhoneticメソッド(フリガナ)
Callステートメント
Functionプロシージャー
プロシージャーの引数
変数の適用範囲(スコープ,Private,Public)

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

Excelワークシート関数一覧(2010以降)|VBAリファレンス(4月22日)
クラスとCallByNameとポリモーフィズム(多態性)|VBA技術解説(4月6日)
VBAでのタイマー処理(SetTimer,OnTime)|VBA技術解説(4月3日)
クラスとイベントとマルチプロセス並列処理|VBA技術解説(4月2日)
エクセルの日付と時刻のまとめ|エクセル関数超技(3月6日)
Excelシートの複雑な計算式を解析するVBA|VBAサンプル集(2月18日)
VBAクラスの作り方:独自Rangeっぽいものを作ってみた|VBA技術解説(2月16日)
VBAクラスの作り方:列名のプロパティを自動作成する|VBA技術解説(2月14日)
VBAクラスの作り方:列名の入力支援と列移動対応|VBA技術解説(2月11日)
クラスを使って他ブックのイベントを補足する|VBA技術解説(2月6日)

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

1.ひらがな⇔カタカナの変換|エクセル基本操作
2.最終行の取得(End,Rows.Count)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • Midステートメント

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


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






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

    本文下部へ