即効テクニック |
引数Startで指定した位置から、引数Lengthで指定した長さの分だけ、引数Stringで指定した文字列から文字列を取り出します。開始位置以降の全ての文字列を取得したい場合には、引数Lengthの指定を省略してください。 構文 Mid(String, Start, Length) MidB(String, Start, Length) 設定項目 内容 String 取り出し元となる文字列式を指定 [省略不可] Start どの位置から文字列を取り出すかを指定 [省略不可] Length 取り出す文字列の長さを指定 [省略可能] 次のサンプルは、セル範囲A1〜A6に入力された文字列を、Mid関数を用いて1文字ずつに分解して右横のセルに記入しています。 ●サンプル●
Sub MidSamp1() Dim c As Range Dim i As Integer For Each c In Range("A1:A6") '---文字数分だけ繰り返し For i = 1 To Len(c.Value) Cells(c.Row, i + 1).Value = Mid(c.Value, i, 1) '---(1) Next i Next c End Sub
●解説● (1)のステートメントで、文字列を分解しています。1回目のループ処理では、カウンタ変数iの値には1が代入されます。つまり、次の式は、最初の1文字を取り出す処理になります。 Mid(c.Value, 1, 1) もちろん、これはLeft関数で引数Lengthに1を指定した場合と同じ結果になります。以降、iの値が1ずつ増加していくことで、文字列の取り出し位置が1文字ずつ右にずれていきます。なお、対象文字列の文字数だけループ処理が必要なため、文字数を返すLen関数で文字数を取得しています。 ●ポイント● Left関数、Right関数、Mid関数などは、Variant型(内部処理形式String)の値で処理結果を返します。これを、String型で値を返す関数にしたい場合には、関数名の末尾にドル記号($)をつけて、「Leht$」といった形で使用するようにしてください。String型で結果を返すようにすると、 ・若干パフォーマンスが向上する ・異なるデータ型での比較を行なう可能性が低くなる といったメリットがあります。しかし、ドル記号つけないからといってエラーが発生することはありません。 ●補足● Midステートメントと混同しないように気をつけてください。Midステートメントは、指定された位置の文字列を、別の文字列に置き換える処理を行ないます。