Home » エクセルマクロ・Excel VBAの使い方 » VBAの2進数リテラルについてChatGPTに質問したら……

VBAの2進数リテラルについてChatGPTに質問したら……

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
binaryNumber = &B1010 ' これは2進数の1010を表します

上記の例では、&Bを使って2進数を表し、その後に希望する2進数値を記述します。この方法で、VBAでは2進数リテラルを扱うことができます。

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
binaryString = "1010"
Dim decimalNumber As Long
decimalNumber = Val("&H" & Hex(Application.WorksheetFunction.Bin2Dec(binaryString)))

この例では、Application.WorksheetFunction.Bin2Decを使用して2進数文字列を10進数に変換し、Hex関数を使って結果を16進数文字列に変換し、最後にVal関数で16進数文字列を10進数に変換しています。ただし、この方法は複雑ですし、2進数リテラルとして直接扱うことはできません。

最初の回答「&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に質問したら……

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.