値を0~255の正の整数に変換する、CByte関数を解説します。
基本形
CByte(変換したい値)
実行例
CByte("100") ' = 100 CByte(300) ' 「オーバーフローしました」エラー CByte(-1) ' 「オーバーフローしました」エラー CByte(1.5) ' = 2 CByte(2.5) ' = 2 CByte("あいう") ' 「型が一致しません」エラー CByte(255.49999) ' = 255 CByte(255.5) ' 「オーバーフローしました」エラー CByte(True) ' = 255 CByte(False) ' = 0 CByte(#4/24/1900#) ' = 115 CByte(#9/12/1900#) ' 「オーバーフローしました」エラー
解説
CByte関数は数値や文字列などをByte型(0~255の正整数)に変換します。
負の数や256以上の値を渡した場合は「オーバーフロー」
文字列を渡した場合は「型が一致しません」エラーを返します。
ほとんど使用することはない関数のためほぼ豆知識になりますが、
小数を渡した場合は「一番近い偶数」いわゆる銀行丸めを行います。
オーバーフロー判定はこの丸めの後で行われているようで、
255.4999・・・はオーバーフローせず255に変換されています。
面白いのがCByte(True)の結果で、
VBAにおいてTrueは-1で内部計算されているのですが、
CByte(True)の結果は255になっています。
-1が一周まわって255になっているのはまさにオーバーフローなのですが、
このオーバーフローはByte型としては必要ななんでしょうね。
ビット演算におけるNot(00000000) = 11111111を入れておくと、
なにかと都合が良いということなのでしょう。
あとは日付型も一応変換してくれますが、
当然ながら1900/1/1から255日分しか対応していません。
この用途で使用することはまずないと思いますので、
どちらかと言えば誤って代入してしまうことにご注意ください。