文字列操作系の関数には、FIND / FINDB や MID / MIDB のように、PC既定の言語設定に応じて、考え方の微妙に異なる関数が、2通り用意されています。
末尾"B"なしの関数は、SBCS(Single Byte Character Set:1バイト文字セット)の使用を意図しており、末尾"B"付き関数は、DBCS(Double Byte Character Set:2バイト文字セット*)の使用を意図して作られた関数です。
最も分り易い動作の違いは、末尾"B"なしの関数は、1バイト文字も 2バイト文字も、各文字が常に 1つとして数えられるのに対し、末尾"B"付きの関数は、2バイト文字を 2つとカウントする点です。
Microsoftによれば、末尾"B"なしの関数は、既定の言語の設定に関係なく、どんな環境でも同じ動作をするとのことですが、末尾"B"付きの関数の振る舞いは「DBCS をサポートする言語の編集を有効にした後で、その言語を既定の言語として設定した場合」限定の話としています。
...が、正直何の話かさっぱり分りません。
英語のWindowsを利用していて、日本語IMEをインストールして日本語入力できるようにしたものの、既定の言語が英語のままなら、末尾"B"のある/なしに関わらず、動作は同じだということでしょうか?
...
何れにせよ、日本語OSを利用していていて、日本語が「既定の言語でない」環境も想像しにくいので、少なくとも日本語を既定言語とされている方は、
漢字等の「全角文字」を1つと数えたいか?、2つと数えたいか?
で、関数の使い分けをお願いします。
ちなみに、筆者の日常的かつ個人的な Excel の用途から考えた場合、末尾"B"付き関数の出番は、ほぼほぼありません。
そも「この文字が1Byteか?2Bytesか?」などという話は、開発者目線の見方でしかなく、長さを数える(LEN)にせよ、切り出す(LEFT/MID/RIGHT)にせよ、探す(FIND/SEARCH)にせよ、置き換える(REPLACE)にせよ、いざ必要となれば、愚直にカーソルを当てて、左からカーソルキーを一文字づつ動かして...
「あぁここだ、ここだ!」
...何文字目か調べた上で、関数の記載を始めるのが関の山です。
全角文字にカーソルキーを持っていって、移動に 2つキー操作が必要でしょうか?
所詮、こんな使い方しかしないのであれば、領域の使用バイト数を念頭に置く関数など、出る幕はないのです。
それでは、なぜ末尾"B"付き関数が必要なのでしょうか?
尤も、使わない人間がこの先の話を進めても信憑性に欠けるので、多くを語るつもりはありませんが、ひとつには「必要は発明の母」だった点は、誰でも思い付く話でしょう。 つまり、末尾"B"なし関数を利用して、克服できない不都合があったので、出来上がった関数だということです。
恐ろしく開発者的な例示ですが、例えば、文字数無制限だったエリアに格納された文字列を、10バイトと定められたエリアに格納し直す必要が生じた場合、すべて1Byteの文字である保証がある上、頭からデータを移せば良いのであれば、LEFT関数でも使って 10文字切り出せば済みますが、元のエリアが日本語表記のエリアであれば、全角/半角文字の使用比率によって、LEFT関数で切り出すバイト数は異なります。最終的な対処法はともかく、精緻に10バイトに向き合った結果が、末尾"B"付き関数なのであれば頷ける話と言えましょう。
ともあれ、極端な 2例で恐縮ながら、改めてどちらを使用すべきか?の点に言及するのであれば、Excelを使用して、精緻にバイト数に向き合う必要のない場合は、末尾"B"なしの関数で十分!が、ご推奨です。
ただし、末尾"B"なし関数を利用する際に、一点気を付けて頂きたいのは、半角カナ文字の濁点に関する対応です。
既定の言語の設定に関係なく、どんな環境でも、各文字(1バイト文字も 2バイト文字も)が常に 1つとして数えられると明言する以上、"パ"であれ、"ゲ"であれ、1つとして数えるのが筋だろうと思うのですが、残念ながら、ここに関して言えば、末尾"B"のある/なしに依らず、同じ結果が返ります。
末尾"B"なしの関数の定義を直しましょう。
末尾"B"なしの関数とは、カーソルキーを動作させた時に、1度のキー操作で動く範囲を一文字とカウントする関数です。
* DBCSはMBCS(Multiple Byte Character Set:複数バイト文字セット)の一種で、この他にも文字セットは多数現存します。
1文字を何バイトで表現するか?に関しては、使用しているコンピュータが、どんな文字セットをサポートしているか?に依存しますが、文字コードや文字セットの解説を始めると、コンピュータの歴史を紐解く壮大な作業となりますので、ここでの言及は避けましょう...f ^_^;)...。
逃げ腰解説で恐縮ですが、Excelで目指したDBCS対応機能に関して、サポートしている「言語」として、日本語、簡体字中国語、繁体字中国語、および韓国語がある点をご確認頂いた上で、日本語表記の場合、関数の使用目的に応じて、末尾に"B"のある/なしの使い分けが必要である点をご理解ください。
0 件のコメント:
コメントを投稿