構文
Mid(String, Start As Long , LengthAs Long) As Variant
MidB(String, Start As Long ,LengthAs Long) As Variant
String・・・任意の「文字列」・「値」を指定します。
Start ・・・取り出す文字列の開始文字位置(文字数)を指定します。(Mid関数の場合)
取り出す文字列の開始文字位置(バイト数)を指定します。(MidB関数の場合)
Length・・・取得する文字数を指定します。(Mid関数の場合)
取得するバイト数を指定します。(MidB関数の場合)
戻り値 ・・・Variant
Start ・・・取り出す文字列の開始文字位置(文字数)を指定します。(Mid関数の場合)
取り出す文字列の開始文字位置(バイト数)を指定します。(MidB関数の場合)
Length・・・取得する文字数を指定します。(Mid関数の場合)
取得するバイト数を指定します。(MidB関数の場合)
戻り値 ・・・Variant
変数や文字列の任意の位置から指定数分、文字を抜き出しします。
MidB関数はバイト数単位の抜出だが、注意が必要
ワークシート関数のMidB関数(Shift-JIS形式)
→半角文字を1Byte、全角文字を2Byteとして取得。
VBA関数のMidB関数(DBCS形式)
→半角文字を2Byte、全角文字を2Byteとして取得。
Mid関数、MidB関数のサンプルコード
Public Sub test_Mid_MidB() Dim lng As Long '■数値は正常に表示可能 lng = 12345 MsgBox Mid(lng, 2, 3) '234 正常表示だがバイト数を加味していない MsgBox StrConv(MidB(StrConv(lng, vbFromUnicode), 2, 3), vbUnicode) '234 正常表示(バイト数も加味) Dim str As String '■文字列は偶数なら問題なし str = "あいうえお" MsgBox Mid(str, 3, 4) 'うえお 正常表示だがバイト数を加味していない MsgBox StrConv(MidB(StrConv(str, vbFromUnicode), 3, 4), vbUnicode) 'いう 正常表示(バイト数も加味) '■文字列は奇数なら文字化けしてしまうケースがある(仕様通り) str = "あいうえお" MsgBox StrConv(MidB(StrConv(str, vbFromUnicode), 3, 3), vbUnicode) 'い・ 5バイト目(取得した3バイト目)が全角文字なので文字化けしてしまう MsgBox StrConv(MidB(StrConv(str, vbFromUnicode), 4, 3), vbUnicode) '・う 4バイト目から取得したが、3バイト目と4バイト目で「い」の全角文字なので文字化けしてしまう str = "あい12うえお" MsgBox StrConv(MidB(StrConv(str, vbFromUnicode), 3, 3), vbUnicode) 'い1 正常表示(バイト数も加味) MsgBox StrConv(MidB(StrConv(str, vbFromUnicode), 5, 2), vbUnicode) '12 正常表示(バイト数も加味) '■MidB関数のみだと正常表示できない lng = 12345 MsgBox MidB(lng, 1, 2) '1→1バイト目から2バイト取得だと「12」と表示されないといけない End Sub
注意点
- バイト数で取得する(MidB関数)場合、且つ全角文字がある場合は注意が必要です。 ■MidB関数の注意点
DBSC→Shift-JISに変換しないと使用できない
Shift-JISに変換しても全角文字が含まれる、且つ文字数が奇数の場合は注意必要
※例
「あいう」は全角文字3→6Byte、1Byte目から3Byte目まで取得しようとすると
2文字目の「い」の半分までしか対象にできず、実行結果が文字化けしています。
関連記事
「フルパスから、パス、ファイル名、拡張子を分ける処理」をパーツ化する【ExcelVBA】
「Javascriptのonclick要素を抜き出す」処理をパーツ化する【VBAでIE操作】
コメント