和風スパゲティのレシピ

日本語でコーディングするExcelVBA

値を0~255の正整数に変換する - CByte関数

値を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日分しか対応していません。

この用途で使用することはまずないと思いますので、
どちらかと言えば誤って代入してしまうことにご注意ください。