- ベストアンサー
MIDB関数について。
以下のURL先で、 https://oshiete.goo.ne.jp/qa/12337311.html 全角文字の半分を指定した場合は半角空白に変換されます。とはどういう事でしょうか?ご教授いただけないでしょうか?すみません。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> 実際は、半角空白とイが両方混じっているという事でしょうか? その通りです。
その他の回答 (6)
- bunjii
- ベストアンサー率43% (3589/8249)
>前半が空白文字になるときは、どんなときでしょうか? 取り出した3バイトを文字化したときの結果(" "&"イ")ですよね? 回答No.4で「提示の数式では取込み開始位置の10バイト目は"取り出すバイト数"の"バ"の後半1バイトからなので返り値の先頭は半角の空白文字になり、取り出すバイト数が3バイトなので返り値の全体は" イ"となります。」と説明していますのでご理解ください。 >後半が空白文字になる時もご教授いただけないでしょうか? 前述からの応用で理解できませんか? 提示の処理対象の文字列の11バイト目から3バイトを取り出したとき末尾の1バイトは"ト"の前半分の1バイトになり取り出された3バイトを文字化すると"イ"&" "になります。
- SI299792
- ベストアンサー率47% (774/1618)
- bunjii
- ベストアンサー率43% (3589/8249)
回答No.1の補足にアドバイスさせていただきます。 >midb("取り出すバイト数", 10,3)=" イ" >というのは、実際は、半角空白とイが両方混じっているという事でしょうか? MIDB関数の第1引数(文字列)は指定の文字列を半角のダブルクォーティションで括られますので第2引数の文字位置(先頭バイトの位置)は半角1文字分加算します。 提示の文字列から"イ"のみを取り出すときは下記の数式になります。 =MIDB("取り出すバイト数",11,2) → "イ" 尚、全角文字の前半または後半の1バイトは文字として扱えないため半角の空白文字(" ")に変換されるようです。 つまり、提示の数式では取込み開始位置の10バイト目は"取り出すバイト数"の"バ"の後半1バイトからなので返り値の先頭は半角の空白文字になり、取り出すバイト数が3バイトなので返り値の全体は" イ"となります。
- imogasi
- ベストアンサー率27% (4737/17069)
#2の補足に関して。 下記実験をやってみた。VBAの関数Lenbを使った。 標準モジュールに下記をコピぺ。 そして実行する。 ーーー Sub test01() str1 = "東京都" lb = LenB(str1) MsgBox lb '6が返される mds1 = MidB(str1, 7, 2) '7はlenb("東京都")-->第2引数を、6より大の指定例 MsgBox mds1 '空白を返す MsgBox "=" & mds1 & "=" '確認のために表示。=と=の間は、引っ付いて見えるでしょう=>空白 MsgBox LenB(mds1) '長さは0 End Sub ーー Msgboxに入れたコメントのように画面に出るでしょう。 Lenb関数の働きから考えて、理屈に合わない指定内容なのだが、エラー扱いにはしない。 でも却って、要注意ですなね。見逃しやすく、後になって見つけて慌てるから。
- imogasi
- ベストアンサー率27% (4737/17069)
MIDB関数の第3引数の、バイト数指定は(取り出すバイト数で、文字数ではない) (1)本来は、2の倍数指定が意味があるが、その指定が偶数かどうかの指定チェックを行わず、 超えない偶数の文字数〘割る2の商)の全角文字を結果として返し、さらに、余りがあれば、余りの1バイトの文字は空白スペースで返す。だからバイト数的な長さは元のまま。チョチョ切らない。 という方針を採っている、だけでしょう。 (2)関数システム設計者は、その指定が偶数かどうかの指定チェックを行い、奇数であるとかや、元のバイト数を超えた指定なれば、エラーにする設計もあったと思うが、(全角文字と+余りの半角1文字とし)を文字数の全体の長さは、指定された元のままにした方が、良いと判断したのだろう。 ーーー 同じような解説は、https://dekiru.net/article/4489/ でも見られました。 •MIDB関数では、半角文字は1バイト、全角文字は2バイトとして数えられます。 •[文字列]のなかに含まれるスペース、句読点、数字などは、MID関数では文字として数えられ、MIDB関数では半角文字は1バイト、全角文字は2バイトとして数えられます。 •[文字列]の末尾を超える長さの[文字数]または[バイト数]を指定すると、[開始位置]から[文字列]の末尾までが返されます。 •[開始位置]として[文字列]の長さを超える値を指定すると、空の文字列が返されます。 https://www.officepro.jp/excelfunc/string/index13.html の以下の解説もわかりやすいと思う。 >バイト数での指定のため、場合によっては全角文字の半分だけしか取得できない場合があります。例えば次のような場合、開始位置の4バイト目は「県」の文字の最初の1バイト目になります。ここから3バイトですので「県」+「名」の半分となりますが、このような場合は空白で置き換えられるので「県」+半角スペースとなります。
補足
•[開始位置]として[文字列]の長さを超える値を指定すると、空の文字列が返されます。とはどういう事でしょうか?もう少し詳しくご教授いただけないでしょうか?すみません。
- notnot
- ベストアンサー率47% (4900/10358)
書いてある文字通りの意味でしょう。 =midb("あいう",1,2) だと、"あ" という値になり、 =midb("あいう",1,1) だと、" " (半角空白)という値になります。 "あ"が2バイトというのは理解していますか?
補足
はい。理解しています。で、 midb("取り出すバイト数", 10,3)=" イ" というのは、実際は、半角空白とイが両方混じっているという事でしょうか?ご教授いただけないでしょうか?すみません。
お礼
後半が空白文字になる時もご教授いただけないでしょうか?すみません。
補足
前半が空白文字になるときは、どんなときでしょうか?ご教授いただけないでしょうか?すみません。