構文
Mid(String, Start As Long , Length As Long) As Variant
MidB(String, Start As Long ,Length As 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操作】
コメント