MidB関数:文字列の指定した位置から指定のバイト数分だけ文字列を取得する
MidB 関数は Excel VBA で用意されている関数の一つで、対象の文字列の指定した位置から指定したバイト数分だけ部分文字列を取得します。ここでは Excel VBA における MidB 関数の使い方について解説します。
※ バイト数ではなく文字数で指定する場合は Mid 関数を使用します。 Mid 関数については「Mid関数:文字列の指定した位置から指定の文字数分だけ文字列を取得する」を参照されてください。
(Last modified: )
MidB関数の定義と使い方
MidB
関数は対象の文字列の指定した位置から指定のバイト数分の文字列を返します。
1 番目の引数に対象となる文字列を指定します。 2 番目の引数に文字列を取得する最初の位置をバイト数で指定します。例えば 3 バイト目の文字から取得する場合は 3 を指定します。 3 番目の省略可能な引数に取得するバイト数を指定します。省略した場合は開始位置から文字列の最後までを取得します。
次の例を見てください。
Debug.Print MidB("FLOWER", 3) 'LOWER Debug.Print MidB("FLOWER", 3, 2) 'L Debug.Print MidB("東京都", 3, 2) '京
1 番目に指定した文字列に対して、 2 番目の引数に指定した位置から 3 番目の引数に指定したバイト数分だけ取得しイミディエイトウィンドウに表示します。 3 番目の引数を省略した場合は文字列の末尾までを取得します。開始位置や取得する文字の長さをバイト数で指定する点に注意してください。
注意点として Shift_JIS ではないので全角文字が 2 バイトで半角文字が 1 バイトではなく、全角文字であっても半角文字であっても 1 文字は 2 バイトである点です。そのため 2 バイト分取得するとどちらも 1 文字だけ取得します。
半角文字を1バイト、全角文字を2バイトとして取得したい場合
全角文字なら 2 バイト、半角文字なら 1 バイトとして文字を取得したい場合は StrConv
関数を使って次のように記述します。(Windows 環境のみ)。
StrConv(MidB(StrConv("FLOWER",vbFromUnicode),3,2),vbUnicode) StrConv(MidB(StrConv("東京都",vbFromUnicode),3,2),vbUnicode)
StrConv
関数で対象の文字列を Unicode から Shift_JIS へ変換したあとで指定の位置から指定のバイト数分文字列を取得し、そのあとで再度 StrConv
関数を使って Shift_JIS から Unicode へ戻しています。
"FLOWER" については 3 バイト目の位置から 2 バイト分として "OW" を取得し、 "東京都" については 3 バイト目の位置から 2 バイト分として "京" を取得します。
※ StrConv
関数の詳しい使い方については「StrConv関数:文字列で大文字小文字や全角半角の変換などを行う」を参照されてください。
それでは簡単なサンプルを作成して試してみます。
Option Explicit Sub MidB関数() Dim i As Integer For i = 3 To 6 Cells(i, 3).Value = MidB(Cells(i, 2).Value, 5, 4) Next i End Sub
このプログラムを実行すると MidB
関数を使って B3 セルから B6 セルに入力されている文字列の 5 バイト目から 4 バイトだけ部分文字列を取得し、取得した文字列を C3 セルから C6 セルにそれぞれ代入します。 MidB
関数をそのまま使用した場合、全角文字であっても半角文字であっても 1 文字は 2 バイトとなります。
もう一つサンプルを作成して試してみます。今度は全角文字が 2 バイト、半角文字が 1 バイトとして計算されるように変更したものです。
Option Explicit Sub RightB関数() Dim i As Integer For i = 3 To 6 Cells(i, 3).Value = StrConv(MidB(StrConv(Cells(i, 2).Value, vbFromUnicode), 5, 4), vbUnicode) Next i End Sub
このプログラムを実行すると MidB
関数を使って B3 セルから B6 セルに入力されている文字列の 5 バイト目から 4 バイトだけ部分文字列を取得し、取得した文字列を C3 セルから C6 セルにそれぞれ代入します。このとき全角文字は 1 文字が 2 バイト、半角文字は 1 文字が 1 バイトとして計算されます。
-- --
Excel VBA における MidB 関数の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。