VBAで10進数の「255」を、16進数で表現するなら「&HFF」、8進数表現するなら「&O377」と書きます。
このルールに則って2進数で表現するなら「&B11111111」のはずですから、テストしたところ「コンパイルエラー」になってしまいます。
この件について、ChatGPT-3.5とBing Chatに、
「vbaで2進数リテラルはどのように書けばいいですか?」
と質問してみました。
ChatGPTは「&B」を使えば書けると回答
ChatGPT-3.5からは以下の回答が得られました。
VBAで2進数リテラルを使用するには、次のように書きます。Dim binaryNumber As Long
上記の例では、&Bを使って2進数を表し、その後に希望する2進数値を記述します。この方法で、VBAでは2進数リテラルを扱うことができます。
binaryNumber = &B1010 ' これは2進数の1010を表します
Bing Chatからは以下の回答でした。
VBAでは、2進数リテラルを表現するために &B プレフィックスを使用します1。例えば、2進数の 1010 は VBAでは &B1010 と表現されます。このように、&B の後に2進数を記述することで、VBAコード内で2進数リテラルを直接使用することができます。
いずれもコンパイルエラーになった「&B」を使えと言っています。
残念ながら。
「&B」で本当に書けるか確認すると……
追加で、
「本当に『&B』を使って書けますか?」
と聞いたところ、ChatGPT-3.5は以下のように回答してきました。
申し訳ありません、VBAでは2進数リテラルに対するビルトインのプレフィックスはありません。代わりに、VBAでは通常、10進数や16進数の数値リテラルが使われます。しかし、VBAで2進数の文字列を変換する関数や方法はあります。たとえば、Val関数を使って文字列を10進数に変換することができます。次のようにして、2進数の文字列を10進数に変換できます:
Dim binaryString As String
この例では、Application.WorksheetFunction.Bin2Decを使用して2進数文字列を10進数に変換し、Hex関数を使って結果を16進数文字列に変換し、最後にVal関数で16進数文字列を10進数に変換しています。ただし、この方法は複雑ですし、2進数リテラルとして直接扱うことはできません。
binaryString = "1010"
Dim decimalNumber As Long
decimalNumber = Val("&H" & Hex(Application.WorksheetFunction.Bin2Dec(binaryString)))
最初の回答「&B」が間違いであったことを認めたものの、謎の追加情報を教えてくれました。
Bing Chatは、以下の回答をしてきました。
はい、それは正しいです。Visual Basic 2017 (VB 15)以降では、プレフィックス &B を使用して2進数リテラルを記述することができます。例えば、2進数の 1010 は &B1010 と表現されます1。ただし、この機能はVB 15以降でのみ利用可能であるため、それ以前のバージョンのVBAでは使用できないことに注意してください。
やはり「はい、それは正しいです。」と断言します。
VBAは、VB15よりはるか前のバージョンVB6がベースになっており、VB15以降で使える「&B」はVBAでは使えません。
ChatGPTは、新しい情報には答えられないことはよく知られていますが、新しくない情報についても間違えることがあるという例です。
VB15以降はプレフィックス「&B」が使えるために、VBAでも「&B」が使えると回答してくるのでしょう。
最終更新日時:2023-11-26 06:24
Home » エクセルマクロ・Excel VBAの使い方 » VBAの2進数リテラルについてChatGPTに質問したら……