Q&A-言語仕様編

VBの文法や関数の使い方に関する質問をまとめました。

Val("&H8000") で 正の値を取得するには、どうすれば良いのでしょう
プログラムの無限ループを中断するには
クラスはどのような時に使うのですか?
構造体を初期化する良い方法はありますか?
コントロール配列を関数の引数にするには?
N88Basic の MKI$、MKS$、MKD$ で出力したデータを VBで読込みには?
JISコードで取得したデータを、VBで使用できる文字列にするには?
切上げ、切捨て、四捨五入をするには?
浮動小数値からバイトデータを取り出すには


Q Val("&H8000") で 正の値を取得するには、どうすれば良いのでしょう

Val("&H8000") 関数から取得した値は、-32768 になってしまいます。これを  Long 型の変数に代入してもマイナスの値のままですが、正の値を取得するにはどうすれば良いでしょうか?

A 文字列の最後に "&" を付けてください

16進数の &H7FFF 以上の文字列を Val 関数に指定した場合は、&H8000 から &H8FFF までが、負の値となってしまいます。これを、正の値にするには、明示的に文字列の型をしている文字を16進数の後に追加してください(この文字を型宣言文字といいます)。次の例を参照してください。

Dim lngValue As Long

lngValue = Val("&H8000&")
Debug.Print lngValue

こうすれば、&H8000 の正の値、32768 が表示されます。同様に文字列の型を指定する場合は、以下の文字を最後に追加してください。

整数型(Integer)    %

長整数型 (Long)   &
単精度浮動小数点数型 (Single)    !
倍精度浮動小数点数型 (Double)   #

(注意)このページの内容は、Visual Basic5.0(SP3) を対象に記述されています。他のバージョンでは、対応できないこともあるので、ご注意願います。

(注意) ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q プログラムの無限ループを中断するには

プログラムを保存する前に、無限ループとなってしまいました。なんとかVBを終了させる前に中断できないでしょうか?

A Ctrl + Break を押してください

あわてて、タスクマネージャで VB を終了させる必要はありません。
プログラムを中断するには、メニューの[実行]−[中断]のショートカットである Ctrl + Break を押してください。


それと、プログラムでループの危険性がある場合は、予めループの中に DoEvents を入れておきましょう。DoEvents を入れておけば、メニューやボタンが操作できます。

Do
        :
        :
    DoEvents
        :
        :
Loop

(注意)このページの内容は、Visual Basic5.0(SP3) を対象に記述されています。他のバージョンでは、対応できないこともあるので、ご注意願います。
(注意) ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q クラスはどのような時に使うのですか?

VBの入門編の書籍を見ていても、クラスの使い方が書いてありません。どのような時にクラスは使うのでしょうか?

A 同じ様なコードを繰返し書く時に使用してください

クラスといえば、オブジェクト指向です(^^。でもそんなに難しく考えないでください。ただ同じようなコーディンゴを何回も書かなければならないような時に効率良くプログラムを書く為に使用すると考えてください。

では、どんな時に、どのようにして効率よくプログラムを書くのでしょうか?

例えば、次のようなケースを考えてください。

・ファイルからデータを一行ずつ読み込む
・読み込んだデータを出力モードによってファイル、プリンタ、通信のいずれかに送る

■ クラスを使わない場合

クラスを使用しない場合、次のようなコーディングが考えられます。

Open 読込むファイル名 For Input As #1

Select Case 出力モード
Case ファイル
    出力ファイルのオープン
    Do While Not EOF(1)
        Line Input #1, InputData

        ファイルへ出力
    Loop
   出力ファイルのクローズ

Case プリンタ
    印刷ダイアログの表示
    Do While Not EOF(1)
        Line Input #1, InputData

        プリンタへ出力
    Loop

    出力ファイルのクローズ

Case 通信
    通信の初期設定
    Do While Not EOF(1)
        Line Input #1, InputData

        通信ポートへ出力
    Loop

    通信ポートの解放

End Select

Close
#1

なんか、同じようなコーディングを3回書いてますますが(^^;
もしデータの読込み方が変わったらどうするのでしょうか? 3個所に同じような修正をしなければなりません(^^;
それと、出力ファイルのオープンや印刷ダイアログの表示などを関数にすると、次のような関数が必要です。


OpenFile -- 出力ファイルのオープン
WriteFile -- ファイルへ出力
CloseFile -- 出力ファイルのクローズ

OpenPrinter -- 印刷ダイアログの表示
WritePrinter -- プリンタへ出力
ClosePrinter -- 出力ファイルのクローズ

OpenComm -- 通信の初期設定
WriteComm -- 通信ポートへ出力
CloseComm -- 通信ポートの解放

これだと、名前を考えたり、覚えるのに苦労しそうですね(^^;

■ クラスを使用した場合

クラスを使用すると、データ型と関数を、まとめて定義することができます。例えば、上記の場合は、次のようなクラスと関数にまとめることができます。


・ファイルクラス

XOpen -- 出力ファイルのオープン
XWrite -- ファイルへ出力
XClose -- 出力ファイルのクローズ

・プリンタクラス

XOpen -- 印刷ダイアログの表示
XWrite -- プリンタへ出力
XClose -- 出力ファイルのクローズ

・通信クラス

XOpen -- 通信の初期設定
XWrite -- 通信ポートへ出力
XClose -- 通信ポートの解放

もう気づいているかもしれませんが、同じ名前が使えます
このクラスを使って、上記のコーディングをすると、次のようになります。

Dim obj As Object

Open 読込むファイル名 For Input As #1

Select Case 出力モード
Case ファイル
    Set obj = New ファイルクラス
Case プリンタ
    Set obj = New プリンタクラス
Case 通信
    Set obj = New 通信クラス
End Select

obj.XOpen
Do While Not EOF(1)
    Line Input #1, InputData

    obj.XWrite
Loop
obj.XClose


Set obj = Nothing

Close
#1

どうです、すっきりしたでしょう(^^。同じようなコーディングがほとんど無くなりました。つまりクラスを使うのは数学の因数分解をしてるようなものです(^^。見た目の問題だけでなく、同じようなコーディングを修正する必要もありません。また、新しいクラスを作れば楽に機能拡張ができます。

それでは、簡単にクラスの作り方を解説しましょう。

1. メニューの [プロジェクト]-[クラスモジュールの追加] を選択して、クラスを作成します。

2. クラスのプロパティでオブジェクト名(クラスの名前)を指定します
(例 -- clsFile , clsPrinter, clsComm)。

3. クラスの変数や関数を定義します。定義方法は、標準モジュールと同じです。


4. クラスを使用する場合には、Dim 変数名 As クラス名 と宣言します(Public や Private などでもOK)。ただし、この変数名はクラスを参照するための変数で、まだ実体がありません。

(例 -- Dim objFile As clsFile)

5. 実体を作る場合には、Set 変数名 = New  クラス名 を書きます。これで、各クラスの変数や関数を使用する事ができます。

(例 -- Set objFile = New clsFile)

(Point) 4. 5. を省略して Dim 変数名 As New クラス名 と書く事もできます。

6. クラスの変数や関数を使用する場合は、上記の変数名を使って 変数名.クラスの関数名変数名.クラスの変数名 の形式で使用します。
(例 -- objFile.XOpen, objFile.XClose)

7. Object型で宣言した変数には、全てのクラスの変数が Set Object型の変数名 = クラスの変数名 の形式で代入できます。ただし、この代入はクラスの参照を代入しているので、別のObject型の変数に代入しても、元クラスの内容が書きかえられると、Object型の変数全ての内容が変わります。

Dim obj1 As Object
Dim obj2 As Object
Dim objTest As New clsTest

Set obj1  = objTest
Set obj2  = objTest


obj1.strName  =  "1234"

' obj2 の内容は obj1.strNam と同じになる
Debug.Print
obj1.strName
Debug.Print obj2.strName

8. 最後に使用済のクラスは Set 変数名 = Nothing で解放しておきます。
(例 -- Set objFile = Nothing


クラスを使うと、この他にも便利なコレクションの機能も使用できます。でひとも、一度挑戦してみてください!


(注意) ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q 構造体を初期化する良い方法はありますか?

構造体を初期化するには、構造体のメンバ変数1つ1つに値を設定する必要がありますが、一度に初期化する方法はありませんか?

A ローカル変数を代入すれば一度に初期化できます

Dim で宣言した VB のローカル変数は、宣言をした時点で VB のデフォルト値に初期化されます。この性質を利用して、ローカル変数を宣言して代入すれば、一度に構造体の初期化ができます。例えば、次のような構造体が標準モジュールに定義されていた場合、

Type PERSON
    strName As String
    strZip As String
    strAddress As String
    strTel As String
    intAge As Integer
    strMail As String
End Type

Public gPerson As PERSON

プログラムで gPerson にデータをセットした後に、この構造体の初期化を行う場合、以下のようなコードを書きますが、

gPerson.strName = ""
gPerson.strZip = ""
gPerson.strAddress = ""
gPerson.strTel = ""
gPerson.intAge = 0
gPerson.strMail = ""

代わりに以下のようにローカル変数を代入すれば、一度に初期化できます。

Dim p As PERSON

gPerson = p

ただし、この初期化は、数値は 0 、文字列は "" のように変数のデフォルト値に初期化する場合のみ有効です。

(注意) ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q コントロール配列を関数の引数にするには?

フォーム上に作成した、テキストの配列等を関数の引数に渡すと、「ユーザー定義型か配列を指定して下さい」というエラーになってしまいます。どうにか引数にコントロールの配列を渡す方法は、あるのでしょうか?

A Variant 型で渡せます

以下のような形式で関数の引数に、TextBox型の配列を渡しても、「ユーザー定義型か配列を指定して下さい」というエラーになってしまいます。

Sub Main()
    Call Func(Text1())
End Sub

Function Func(txt() As TextBox) As Boolean
    :
    :
End Function

この場合、TextBox 型ではなく、以下のように Variant 型を指定し、変数名の () も指定しないでください。

Function Func(txt As Variant) As Boolean
    :
    :
End Function

Variant 型で取得した変数は、そのまま配列として使用できます。

Function Func(txt As Variant) As Boolean
    Dim i As Integer

    For i = txt.LBound To txt.UBound
        Debug.Print txt(i).Text
    Next

End Function

(注意)このページの内容は、Visual Basic5.0(SP3) を対象に記述されています。他のバージョンでは、対応できないこともあるので、ご注意願います。
(注意) ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q N88Basic の MKI$、MKS$、MKD$ で出力したデータを VBで読込みには?

N88Basic の MKI$、MKS$、MKD$ で出力したで作成したランダムファイルのデータを、VBで読込みには、どうしたらよいでしょうか?

A バイナリで読込んで、CVI、CVS、CVD に相当する関数を作成します

N88Basic の MKI$、MKS$、MKD$ で出力したで作成したランダムファイルのデータは、N88Basic では、CVI、CVS、CVD で変換できますが、VBには同等の機能がありません。そこで VB で、CVI、CVS、CVD に相当する関数を作成すれば、データを変換することができます。
その前に、まずN88Basic で作成したファイルのデータを読込む必要があります。そこで、以下の点に気を付けてください。

MKI$ で出力した場合は、そのまま Integer型 のデータとして取り込めます。
MKS$、MKD$ で出力した場合は、Byte型の配列で取り込んでください。String 型で読込んだ場合、取得した文字が Unicode に変換される為、思った通りの値が取得できません。

それでは、N88Basic側 で以下のような出力をした場合を考えてみましょう。

10 OPEN "C:\TEMP\TEST.DAT" AS #1
20 FIELD #1,2 AS A$, 4 AS B$, 8 AS C$
30 D%=20
40 E!=19.6!
50 F#=19.6#
60 LSET A$=MKI$(D% )
70 LSET B$=MKS$(E!)
80 LSET C$=MKD$(F#)
90 PUT #1
100 CLOSE #1
110 END

このデータをVB側で取得する場合には、以下のようにします。

Dim d As Integer
Dim e(3) As Byte     '4バイトの Byte配列
Dim f(7) As Byte      '8バイトの Byte配列

Open "C:\TEMP\TEST.DAT" For Binary Access Read As #1
Get #1, , d
Get #1, , e
Get #1, , f
Close #1

これで、データが取得できました。あとは、CVS、CVD に相当する関数を作成します。この関数を作成する場合には、まず、N88Basicでのデータのフォーマットを理解しておく必要があります。まず単精度4バイトの形式ですが、以下のようになっています。

バイト
内容 指数部 仮数部

1バイト目は指数部で、指数部は、&H80の下駄が加算されています。つまり、&h7F は−1、&h7E は−2で &h81 は 1 となります。また、&H80 は特例で数値全体が0であることを示します。
仮数部は、先頭の1ビットが符号となっています。また、2ビット以降が小数点以下の2ビット以降となります。小数点以下の1ビット目は常に1と見なされます。(0.1XXXX で XXXX が仮数部の2ビット以降)
同様に倍精度8バイトの形式は以下の通りです。

バイト
内容 指数部 仮数部

指数部、仮数部の意味は単精度と同じです。
また、インテル系のプロセッサでは、全てのバイトが逆順になるので注意してください。
それでは、上記のバイト配列を Single と Double に変換するサンプルを紹介します。

' バイト配列を Single に変換
Function ToSingle(b() As Byte) As Single
    Dim i As Long
    Dim j As Long
    Dim bit As Long
    Dim byt As Long
    Dim exp As Double
    Dim man As Double
    Dim div As Double
    Dim sign As Double

    If b(3) = 0 Then
        ToSingle = 0#
        Exit Function
    End If

    sign = IIf(b(2) And &H80, -1#, 1#)
    b(2) = &H80 Or b(2)
    div = 0.5
    man = 0#
    For i = 2 To 0 Step -1
        byt = CLng(b(i))
        bit = &H80
        For j = 0 To 7
            If byt And bit Then
                man = man + div
            End If
            bit = bit \ 2
            div = div / 2
        Next
    Next

    exp = 2# ^ CDbl(b(3) - &H80)

    ToSingle = sign * man * exp
End Function

' バイト配列を Double に変換
Function ToDouble(b() As Byte) As Double
    Dim i As Long
    Dim j As Long
    Dim bit As Long
    Dim byt As Long
    Dim exp As Double
    Dim man As Double
    Dim div As Double
    Dim sign As Double

    If b(7) = 0 Then
        ToDouble = 0#
        Exit Function
    End If

    sign = IIf(b(6) And &H80, -1#, 1#)
    b(6) = &H80 Or b(6)
    div = 0.5
    man = 0#
    For i = 6 To 0 Step -1
        byt = CLng(b(i))
        bit = &H80
        For j = 0 To 7
            If byt And bit Then
                man = man + div
            End If
            bit = bit \ 2
            div = div / 2
        Next
    Next

    exp = 2# ^ CDbl(b(7) - &H80)

    ToDouble = sign * man * exp
End Function

最後に、先ほどの読込んだデータを、この関数で変換してみましょう。

Dim d As Integer
Dim e(3) As Byte     '4バイトの Byte配列
Dim f(7) As Byte      '8バイトの Byte配列

Open "C:\TEMP\TEST.DAT" For Binary Access Read As #1
Get #1, , d
Get #1, , e
Get #1, , f
Close #1


Dim sValue As Single
Dim dValue As Double

sValue = ToSingle(e)
dValue = ToDouble(f)

Debug.Print d
Debug.Print sValue
Debug.Print dValue

(注意)上記のサンプルは、誤差が発生する恐れがあります。充分にテストを行ってあくまでも各自の責任にて、ご使用ください。
(注意)
このページの内容は、Visual Basic5.0(SP3) を対象に記述されています。他のバージョンでは、対応できないこともあるので、ご注意願います。
(注意) ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q JISコードで取得したデータを、VBで使用できる文字列にするには?

JISコードで取得した漢字のデータを、VBで使用できる文字にするにはどうしたら良いのでしょうか?

A Shift Jis コードに変換して Chr$ でVBの文字列に変換します

VBで使用する為には、まず ShiftJisのコードか、Unicode に変換すれば使用できますが、ここでは、Shift Jis に変換する方法を紹介します。
Shift Jis に変換するには、以下のような関数で変換できます。

Sub Jis2SJis(hi As Integer, lo As Integer)
    If hi And 1 Then
        If lo < &H60 Then
            lo = lo + &H1F
        Else
            lo = lo + &H20
        End If
    Else
        lo = lo + &H7E
    End If

    If hi < &H5F Then
        hi = (hi + &HE1) \ 2
    Else
        hi = (hi + &H161) \ 2
    End If
End Sub

hi As Integer にはJISコードの上位バイト、lo As Integer にはJISコードの下位バイトをセットしてください。Shift Jis に変換されたコードが hi と lo に返されます。さらに、このコードをVBで使用できる文字にするには、以下のように Chr$ で変換すれば、VBの文字列となります。

Chr$(hi * &h100 + lo)

参考の為に、Shift Jis を Jis コードに変換する関数も紹介します。

Sub SJis2Jis(hi As Integer, lo As Integer)
    If hi <= &H9F Then
        If lo < &H9F Then
            hi = hi * 2 - &HE1
        Else
            hi = hi * 2 - &HE0
        End If
    Else
        If lo < &H9F Then
            hi = hi * 2 - &H161
        Else
            hi = hi * 2 - &H160
        End If
    End Iff

    If lo < &H7F Then
        lo = lo - &H1F
    ElseIf lo < &H9F Then
        lo = lo - &H20
    Else
        lo = lo - &H7E
    End If
End Sub

(Point)このコードは、変換速度を優先させる為に、IIf などの関数は使用しないようにしたり、演算回数を少なくしています。

(注意)このページの内容は、Visual Basic5.0(SP3) を対象に記述されています。他のバージョンでは、対応できないこともあるので、ご注意願います。

(注意) ここでの情報については、あくまでも各自の責任にて、充分にテストを行ってご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q 切上げ、切捨て、四捨五入をするには?

切上げ、切捨て、四捨五入をするにはどうしたら良いです。

A Int 関数または Fix 関数を使います

切捨ては、Int 関数の機能そのものです。切上げは、元の値を s とすると、-Int(-s) で計算できます。四捨五入は、元の値に 0.5 を加えて、Int 関数を使用すれば計算できます。
以上ことを使用して、サンプルを作成すると次の通りです。

Dim s As Single

For s = -2 To 2 Step 0.1
    '元の値
   Debug.Print s,
   '切上げ
   Debug.Print -Int(-s),
    '切捨て
   Debug.Print Int(s),
    '四捨五入
   Debug.Print Int(s + 0.5)
Next

小数点以下2桁を切上げたい場合は、元の値を 100倍してから、上記の計算をし、結果を100で割れば計算できます。
また、上記のサンプルを実行すると以下のように、2進数の計算誤差のために、正しく計算できない場合があります。

0.9000004 1 0 1
1 2 1 1 <- 1を切上げすると2になっている(^^;
1.2 2 1 1

これを確実に行うには、通貨型を使って計算するとより確実にできます。
(Point)通貨型より誤差の少ない計算を行いたい場合は、10進型を使用してください。

Dim s As Currency

For s = -2@ To 2@ Step 0.1@
    '元の値
   Debug.Print s,
   '切上げ
   Debug.Print -Int(-s),
    '切捨て
   Debug.Print Int(s),
    '四捨五入
   Debug.Print Int(s + 0.5@)
Next

出力結果は、以下のようになります

0.9 1 0 1
1 1 1 1
1.1 2 1 1
1.2 2 1 1

ところで、上記の方法を使用した場合、負の値はどうなるでしょうか?

-1.6 -1 -2 -2
-1.5 -1 -2 -1
-1.4 -1 -2 -1

元の値が −1.5の場合は、切上げは 1、切捨ては -2四捨五入は 1 となります。
一見正しそうですが、一般的に切上げ、切捨て
四捨五入は絶対値に対して行うのが慣例のようです。その場合、切捨て四捨五入は、Int 関数の代わりに、Fix 関数を使用します。ただし、四捨五入の場合は元の値に加える値(0.5)を、元の値の符号に合わせる必要があります。また、切上げに関しては、絶対値で上記の計算を行い、最後に符号を掛けます。
符号を考慮したサンプルは、以下の通りです。

Dim s As Currency

For s = -2@ To 2@ Step 0.1@
    '元の値
   Debug.Print s,
   '切上げ
   Debug.Print Sgn(s) * -Int(-Abs(s)),
    '切捨て
   Debug.Print Fix(s),
    '四捨五入
   Debug.Print Fix(s + Sgn(s) * 0.5@)
Next

計算結果は次のようになります。

-1.1 -2 -1 -1
-1 -1 -1 -1
0.9 -1 0 -1
-0.6 -1 0 -1
-0.5 -1 0 -1
-0.4 -1 0 0
-0.1 -1 0 0
0 0 0 0
0.1 1 0 0

最後に、これらのことをまとめて、関数にしてみました。

' cur を小数点以下 pos 桁目で切上げ
Public Function Floor(cur As Currency, pos As Integer) As Currency
    Floor = Sgn(cur) * -Int(-Abs(cur * (10@ ^ pos))) / (10@ ^ pos)
End Function

' cur を小数点以下 pos 桁目で切捨て
Public Function Ceil(cur As Currency, pos As Integer) As Currency
    Ceil = Fix(cur * (10@ ^ pos)) / (10@ ^ pos)
End Function

' cur を小数点以下 pos 桁目で四捨五入
Public Function Round(cur As Currency, pos As Integer) As Currency
    Round = Fix(cur * (10@ ^ pos) + Sgn(cur) * 0.5@) / (10@ ^ pos)
End Function

より精度の高い計算をしたい場合は、以下の10進型の関数を使用してください。

' dec を小数点以下 pos 桁目で切上げ
Public Function DecFloor(dec As Variant, pos As Integer) As Variant
    DecFloor = Sgn(CDec(dec)) * -Int(-Abs(CDec(dec) * (CDec(10) ^ CDec(pos)))) / (CDec(10) ^ CDec(pos))
End Function

' dec を小数点以下 pos 桁目で切捨て
Public Function DecCeil(dec As Variant, pos As Integer) As Variant
    DecCeil = Fix(CDec(dec) * (CDec(10) ^ CDec(pos))) / (CDec(10) ^ CDec(pos))
End Function

' dec を小数点以下 pos 桁目で四捨五入
Public Function DecRound(dec As Variant, pos As Integer) As Variant
    DecRound = Fix(CDec(dec) * (CDec(10) ^ CDec(pos)) + Sgn(dec) * CDec(0.5)) / (CDec(10) ^ CDec(pos))
End Function

(謝辞)このQ&Aを作成する時に、アドバイスをいただいた K.Kさん、あXXXXXさん。ありがとうございました。

(注意)このページの内容は、Visual Basic5.0(SP3) を対象に記述されています。他のバージョンでは、対応できないこともあるので、ご注意願います。
(注意) ここでの情報については、あくまでも各自の責任にて、充分にテストを行ってご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q 浮動小数値からバイトデータを取り出すには

Singleで宣言されたされた変数は、4バイトで構成されていますが、各バイトのデータを Byte型に取出すにはどうしたら良いでしょうか?

A LSet で取出せます

LSet を使用するとユーザー定義型の変数を別のユーザー定義型の変数にコピーできます。これを、利用して、特定の型の変数を Byte型の配列にコピーできます。
早速サンプルを見てみましょう。

Private Type DEF_BYTES
    b(64) As Byte
End Type

Private Type DEF_INT
    i As Integer
End Type

Private Type DEF_SINGLE
    s As Single
End Type

Private Type DEF_DOUBLE
    d As Double
End Type

Private Sub Command1_Click()
    Dim by As DEF_BYTES
    Dim di As DEF_INT
    Dim ds As DEF_SINGLE
    Dim dd As DEF_DOUBLE
    Dim i As Integer

    'Interger を Byte の配列に変換

    di.i = 1000
    LSet by = di
    For i = 0 To 1
        Debug.Print Hex$(by.b(i))
    Next

    'Single を Byte の配列に変換

    ds.s = 1000
    LSet by = ds
    For i = 0 To 3
        Debug.Print Hex$(by.b(i))
    Next

    'Double を Byte の配列に変換

    dd.d = 1000
    LSet by = dd
    For i = 0 To 7
        Debug.Print Hex$(by.b(i))
    Next
End Sub


(注意)このページの内容は、Visual Basic5.0(SP3) 、Visual Basic6.0(SP3)を対象に記述されています。他のバージョンでは、対応できないこともあるので、ご注意願います。

(注意) ここでの情報については、あくまでも各自の責任にて、充分にテストを行ってご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。